#include <thread>
#include <iostream>
#include <mutex>
using namespace std;
int k = 200;
mutex mt;
void f1(){
while (true){
mt.lock();
if (k > 0){
k--;
cout << "f1:" << k << endl;
}else{
// 如果中途退出,一定要释放锁,防止出现独占式情况
mt.unlock();
break;
}
mt.unlock();
}
}
void f2(){
while (true){
mt.lock();
if (k > 0){
k--;
cout << "f2:" << k << endl;
}else{
// 如果中途退出,一定要释放锁,防止出现独占式情况
mt.unlock();
break;
}
mt.unlock();
}
}
int main(){
thread t1(f1);
thread t2(f2);
t1.join();
t2.join();
return 0;
}
-
join()
join用于阻塞当前线程等待thread执行完执行体。一般用于多线程之间进行同步。对于不具备分离属性的线程必须要join,否则会导致terminal。我觉得白话文就是join 是让当前主线程等待所有的子线程执行完,才能退出。 -
joinable()
成员函数joinable用于检测thread是否需要join。joinable为false的情况有3种:1.thread调用过detach; 2.thread已经join过; 3.thread为空。
本文展示了一个使用C++标准库中的互斥锁(mutex)来控制多线程对共享资源访问的示例代码。通过两个线程交替减少全局变量的值,演示了如何避免竞态条件,确保数据的一致性和线程安全。
523

被折叠的 条评论
为什么被折叠?



