c++多线程锁机制:条件变量condition_variable
(2024-10-05 02:53:59)| 分类: 接口类的哈 |
#include iostream
#include thread
#include mutex
#include
condition_variable
std::mutex mtx; // 互斥锁
std::condition_variable cv; // 条件变量
int myvalue = 0; // 被多个线程共享的值
bool turn = false; // 布尔变量用于指示线程执行的顺序
void increment(int thread_id) {
}
int main() {
}
——————————————————————————
1、cv.wait(lock, [&] {
return (thread_id == 1) ? !turn : turn; }
);
cv.wait(lock,predicate),此处 predicate 单词含义:谓词。 就是 返回
布尔数值 true、false的表达式。


2、 如果 return (thread_id == 1) ? !turn :
turn; } 此三目运算符,
如果
return 为!ture
ture 假设 当时为 false

所以 !turn=true。
三目运算符 返回结果为:return true
简化为 cv.wait(lock,predicate=true)
那就是 thread_id 这个1号进程 不用 继续
等待,可以继续执行。即为,线程1已经等到了条件变量cv为true,可以继续执行。
————————————
如果线程为2,那 三目结果取后面的 turn :false。则 2号线程
需要等待。
https://www.bilibili.com/video/BV1E4421D76e/?spm_id_from=333.788&vd_source=2a756a841699e678985ce674ad996db8

加载中…