| by YoungTimes | No comments

C++11多线程编程-实现线程安全队列

线程安全队列的接口文件如下:

push函数

push()函数实现向队列添加数据的功能。添加数据后,使用std::condition_variable的notify_one通知取数据时被阻塞的线程。

wait_and_pop函数

wait_and_pop()函数实现从队[……]

继续阅读

Read More
| by YoungTimes | No comments

C++11多线程编程-std::async

C++11中提供了异步线程接口std::async,std::async是异步编程的高级封装,相对于直接使用std::thread,std::async的优势在于:

1、std::async会自动创建线程去调用线程函数,相对于低层次的std::thread,使用起来非常方便;

2、std[……]

继续阅读

Read More
| by YoungTimes | No comments

C++多线程编程-分析每个函数的内存占用

最近遇到一个“内存占用不断增加”的问题,从代码上没有分析出任何异常,束手无策只有只有借助第三方工具Google Heap Profiler。Google Heap Profiler是Google开源性能内存检测工具GPerfTools系列工具中的一个,可以帮助我们检测代码中出现的内存泄露,帮助我们了[……]

继续阅读

Read More
| by YoungTimes | No comments

C++多线程编程-设计无锁并发堆栈

今天我们来设计一个并发堆栈(Stack),这个堆栈(Stack)虽然支持多线程访问,但是没有锁。

向堆栈压入数据

在push方法里,使用了C++11的CAS方法: compare_exchange_weak。compare_exchange_weak会比较当前值和期望值,当前值与[……]

继续阅读

Read More
| by YoungTimes | No comments

C++多线程编程-设计并发队列

1、最基础的并发队列

并发队列最直观的实现就是使用互斥锁管理数据同步,向队列中添加数据或者删除数据时,使用互斥锁保证访问的安全性。

如下代码所示,我们基于STL中的链表(List)实现并发队列,队列类的构造函数和析构函数负责创建和销毁互斥锁。

在并发队列中插入数据:

[……]

继续阅读

Read More
| by YoungTimes | No comments

C++多线程编程-C++ Concurrency in Action

C++ Concurrency in Action可以作为C++在编写优雅多线程应用方面的权威指南。其详细描述了启动新线程到设计复杂的多线程算法和数据结构,在每一章中并发大师Anthony Williams都提供了示例和一些练习和一些独到的见解,这对于从事并发开发的同学会很有帮助。

<&[……]

继续阅读

Read More