| by msbeta | No comments

C++多线程编程-揪出高CPU占用的线程

在工程实践中,有很多对性能要求比较苛刻的场景,要求CPU的占用不能超过指定的阈值,以保证系统整体的实时响应。本文主要记录下如何抓出CPU占用高的线程。

假设有如下业务代码:

代码编译:

g++ cpu.cpp -o cpu -pthread -g

1.定位线程

使用[……]

继续阅读

Read More
| by msbeta | No comments

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

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

向堆栈压入数据

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

继续阅读

Read More
| by msbeta | No comments

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

1、最基础的并发队列

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

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

在并发队列中插入数据:

[……]

继续阅读

Read More
| by msbeta | No comments

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

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

<&[……]

继续阅读

Read More
| by msbeta | No comments

C++多线程-GDB调试

1、GDB多线程调试基础

先看一个简单的场景,丈夫和妻子赚钱养家,丈夫每天赚6美元,妻子每天赚3美元,(生活不易,哈哈),它们每天把挣到的钱存到共用账户。C++代码示例如下:

代码编译:

g++ -std=c++11 hard_life.cpp -o hard_life -lp[……]

继续阅读

Read More