函数介绍
lock_guard:锁定互斥锁后,生命周期结束后会自动释放,不需要手动解锁,也无法手动解锁
unique_lock:多数情况与上面一个可以相互替代,但是其更具功能性(付出一些代价)。unique_lock可以进行unlock操作,因此可以和条件变量搭配使用
多线程输出数字
多个线程互斥输出: 0 1 2 3 4 5 6 ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream> #include <vector> #include <thread> #include <mutex> using namespace std; int idx = 0; mutex _mutex; void func(int n) { while (idx < n) { lock_guard<mutex> tmp(_mutex); if (idx >= n) break; cout << idx++ << " "; } } int main() { vector<thread> arr; for (int i = 0; i < 10; ++i) arr.push_back(thread(func, 1000)); for (auto& e : arr) e.join(); return 0; }
|