C++11多线程编程-实现线程安全队列
线程安全队列的接口文件如下:
push函数
push()函数实现向队列添加数据的功能。添加数据后,使用std::condition_variable的notify_one通知取数据时被阻塞的线程。
wait_and_pop函数
wait_and_pop()函数实现从队[……]
Read More线程安全队列的接口文件如下:
push函数
push()函数实现向队列添加数据的功能。添加数据后,使用std::condition_variable的notify_one通知取数据时被阻塞的线程。
wait_and_pop函数
wait_and_pop()函数实现从队[……]
Read MoreC++11中提供了异步线程接口std::async,std::async是异步编程的高级封装,相对于直接使用std::thread,std::async的优势在于:
1、std::async会自动创建线程去调用线程函数,相对于低层次的std::thread,使用起来非常方便;
2、std[……]
Read More最近遇到一个“内存占用不断增加”的问题,从代码上没有分析出任何异常,束手无策只有只有借助第三方工具Google Heap Profiler。Google Heap Profiler是Google开源性能内存检测工具GPerfTools系列工具中的一个,可以帮助我们检测代码中出现的内存泄露,帮助我们了[……]
Read More今天我们来设计一个并发堆栈(Stack),这个堆栈(Stack)虽然支持多线程访问,但是没有锁。
向堆栈压入数据
在push方法里,使用了C++11的CAS方法: compare_exchange_weak。compare_exchange_weak会比较当前值和期望值,当前值与[……]
Read More1、最基础的并发队列
并发队列最直观的实现就是使用互斥锁管理数据同步,向队列中添加数据或者删除数据时,使用互斥锁保证访问的安全性。
如下代码所示,我们基于STL中的链表(List)实现并发队列,队列类的构造函数和析构函数负责创建和销毁互斥锁。
在并发队列中插入数据:
[……]
Read MoreC++ Concurrency in Action可以作为C++在编写优雅多线程应用方面的权威指南。其详细描述了启动新线程到设计复杂的多线程算法和数据结构,在每一章中并发大师Anthony Williams都提供了示例和一些练习和一些独到的见解,这对于从事并发开发的同学会很有帮助。
<&[……]
Read More