C++ 11 笔记 (五) : std::thread

这真是一个巨大的话题。我猜记录完善绝B需要一本书的容量。

所以。。我只是略有了解,等以后用的深入了再慢慢补充吧。

 

C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boost库的pthread,对比一下感觉Java和C#的多线程真好用。。

在C++11中,标准库又添加了std::thread这个好用的线程库,基本就是boost的pthread演化来的,用法也差不多。所以先举个简单的例子:

 1 void func1(std::string str)

 2 {

 3     for (int i = 0; i < 10; i++)

 4     {

 5         std::cout << str << std::endl;

 6     }

 7 }

 8 

 9 void func2()

10 {

11     for (int i = 0; i < 10; i++)

12     {

13         std::cout << "BBB" << std::endl;

14     }

15 }

16 

17 int main()

18 {

19     std::thread t1(func1, "AAA");

20     std::thread t2(func2);

21     t1.join();

22     t2.join();

23     return 0;

24 }

这样就会同时输出“AAA”和“BBB”了。

 

另外,t1还可以写成这样:

1 std::thread t1(std::bind(func1, "AAA"));

当然,还可以这样:

1 std::thread t2([]{

2     for (int i = 0; i < 10; i++)

3     {

4         std::cout << "BBB" << std::endl;

5     }

6 });

 

跟大多数语言一样,join是等待子线程结束,主线程会阻塞。相对应的还有detach,作用是托管线程,跟主线程各自执行。

 

还有两个常用的成员函数:

get_id  ——获取线程 ID。
joinable  ——检查线程是否可被 join。

 

还有互斥量,直译就可以了:

mutex 互斥量
timed_mutex 超时互斥量
recursive_mutex 递归互斥量
recursive_timed_mutex 递归超时互斥量

 

互斥量的常用成员函数:

lock    获取锁

trylock    尝试获取锁

unlock    释放锁

try_lock_for    在一定时间范围内尝试获取锁(有超时功能的mutex才能用)

try_lock_until    尝试获取锁到某个时间点位置(有超时功能的mutex才能用)

 

类似Java的Lock类和C#的lock。

你可能感兴趣的:(thread)