合集-并发编程

摘要:C++标准库为线程间同步提供了条件变量(condition variables)和future。并发规范中,为future添加了非常多的操作,并可与新工具锁存器(latches)和栅栏(barries)一起使用。 等待事件或条件 这节开篇的这个例子我觉得非常好,摘抄如下: 假设你正在一辆在夜间运行的 阅读全文
posted @ 2025-02-16 21:28 cwtxx 阅读(5) 评论(0) 推荐(0) 编辑
摘要:互斥量是一个强大的工具,可以在并发情况下保护数据,防止数据竞争的发生,但同时,使用互斥量难免会影响并发的性能。如果能写一个无锁安全的并发数据结构,就能更好地发挥并发。 原子量实现的简单自旋锁 class SpinLock { public: SpinLock() : m_flag(ATOMIC_FL 阅读全文
posted @ 2025-02-16 16:16 cwtxx 阅读(11) 评论(0) 推荐(0) 编辑
摘要:线程管理 std::thread可以通过有函数操作符类型的实例进行构造。 #include <thread> class Task { public: void operator()() const { dosomething(); } }; Task task; std::thread mythr 阅读全文
posted @ 2025-02-16 16:14 cwtxx 阅读(3) 评论(0) 推荐(0) 编辑
摘要:对象和内存位置 C++中,对象仅是对数据块的声明,C++标准定义类对象是“存储区域”,但对象可以将自己的特性赋予其他对象。 位域 C/C++中可以指定数据在内存中的存储大小(如果有必要的话),最常见的是为了压缩数据的大小。使用位域需要遵循以下的规则: 显式指定了位域大小的变量,如果总的位域之和不超过 阅读全文
posted @ 2025-02-16 21:59 cwtxx 阅读(6) 评论(0) 推荐(0) 编辑
摘要:共享数据 避免恶性条件竞争 最简单的方式是对数据结构采取某种保护机制,比如上锁。 另一种方式是修改数据结构,保证修改后的数据结构能够完成一系列的不可分割的变化,从而保证了不变量的状态,也就是所谓的无锁编程。 互斥量 c++标准库提供了std::mutex,可以很方便的进行上锁操作。大部分情况下只需要 阅读全文
posted @ 2025-02-16 22:04 cwtxx 阅读(1) 评论(0) 推荐(0) 编辑
摘要:C++提供了std::thread对线程进行管理,但面对复杂的任务情况,往往有些捉襟见肘,我们希望可以对线程的整个生命周期进行管理,而不是放任其直到执行完成,理想情况下,能够将代码划分为更小的块,再通过并发执行。 另外,有时候我们还希望在线程启动后可以有方法“干预”其执行,比如某些情况下让其停止或者 阅读全文
posted @ 2025-02-16 22:05 cwtxx 阅读(13) 评论(0) 推荐(0) 编辑
摘要:future 标准库中提供的future用于接收一个异步执行结果,常和async配合使用,async执行一个异步操作,并将结果封装成一个future对象,外部通过future提供的get方法来获取异步执行的结果。 int main() { cout << "call async\n"; auto s 阅读全文
posted @ 2025-02-16 22:26 cwtxx 阅读(3) 评论(0) 推荐(0) 编辑

more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示