| by msbeta | No comments

C++11多线程-线程休眠(sleep)

C++ 11之前并未提供专门的休眠函数。c语言的sleep、usleep其实都是系统提供的函数,不同的系统函数的功能还有些差异。

在Windows系统中,sleep的参数是毫秒。

在类Unix系统中,sleep()函数的单位是秒。

从C++11开始,中C++标准库提供了专门[……]

继续阅读

Read More
| by msbeta | No comments

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

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

假设有如下业务代码:

代码编译:

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

1.定位线程

使用[……]

继续阅读

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
| by msbeta | No comments

C++多线程编程-基础入门

1. Hello Word

先从一个简单的多线程程序开始,标准的C++库中提供了对于多线程的支持,实现一个简单的多线程的代码非常容易。

在新线程启动后,主线程会继续执行到main()函数结束,然后退出程序,这时新线程可能还没有被执行。为了保证新线程一定可以被调用执行,需要调用join[……]

继续阅读

Read More
| by msbeta | No comments

C++11多线程-如何用带参数的类成员函数作为线程启动函数

1、使用非静态类成员函数作为线程启动函数

假设存在如下Task类,它有一个名为execute()的非静态成员函数。

现在我们计划用Task的类的成员函数execute()函数作为线程的启动函数。由于execute()是静态函数,为了调用该函数,我们必须首先实例化一个Task对象。

[……]

继续阅读

Read More