C++ 11 笔记 (五) : std::thread
2014-04-24 20:22
183 查看
这真是一个巨大的话题。我猜记录完善绝B需要一本书的容量。
所以。。我只是略有了解,等以后用的深入了再慢慢补充吧。
C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boost库的pthread,对比一下感觉Java和C#的多线程真好用。。
在C++11中,标准库又添加了std::thread这个好用的线程库,基本就是boost的pthread演化来的,用法也差不多。所以先举个简单的例子:
这样就会同时输出“AAA”和“BBB”了。
另外,t1还可以写成这样:
当然,还可以这样:
跟大多数语言一样,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。
所以。。我只是略有了解,等以后用的深入了再慢慢补充吧。
C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boost库的pthread,对比一下感觉Java和C#的多线程真好用。。
在C++11中,标准库又添加了std::thread这个好用的线程库,基本就是boost的pthread演化来的,用法也差不多。所以先举个简单的例子:
void func1(std::string str) { for (int i = 0; i < 10; i++) { std::cout << str << std::endl; } } void func2() { for (int i = 0; i < 10; i++) { std::cout << "BBB" << std::endl; } } int main() { std::thread t1(func1, "AAA"); std::thread t2(func2); t1.join(); t2.join(); return 0; }
这样就会同时输出“AAA”和“BBB”了。
另外,t1还可以写成这样:
std::thread t1(std::bind(func1, "AAA"));
当然,还可以这样:
std::thread t2([]{ for (int i = 0; i < 10; i++) { std::cout << "BBB" << std::endl; } });
跟大多数语言一样,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。
相关文章推荐
- C++ 11 笔记 (四) : std::bind
- 《C++ Concurrency in Action》笔记5 std::thread::id
- C++初学者笔记:std::thread,子线程阻塞主线程的问题
- C++学习笔记-----std::pair作为unordered_map的key
- 学习笔记-多项式的加减乘数及微分的C++实现15/11/02
- C++学习笔记(11)——虚函数的特性
- c++ primer plus阅读笔记11---深拷贝与浅拷贝
- C++ 11新特性笔记-1: 保证稳定性和兼容性
- C/C++学习笔记:基础知识11
- C++ 11笔记
- Effective Modern C++ 条款37 在所有路径上,让std::thread对象变得不可连接(unjoinable)
- C++ 11新特性 thread开放线程
- C++ 11 std::function std::bind使用
- C++ 学习笔记(11)关联容器、桶
- C++——多线程编程(一)std::thread
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
- 【C++研发面试笔记】11. 基本数据结构-红黑树RBT
- MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
- 【C++】学习笔记草稿版系列11(运算符重载)