#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<mutex>
#include<thread>
#include<condition_variable>
using namespace std;
int n = 100;
mutex mt;
condition_variable cv1;
bool print_tag = true;
void hello() {
for (int i = 0; i < n; i++) {
unique_lock<mutex> lock(mt);
cv1.wait(lock, [] { return print_tag; }); // print_tag为true,所以不会阻塞,继续执行打印hello
printf("hello");
print_tag = false;
cv1.notify_one();
}
}
void world() {
for (int i = 0; i < n; i++) {
unique_lock<mutex> lock(mt);
cv1.wait(lock, [] { return !print_tag; }); // print_tag 为true,阻塞线程,直到被其他线程唤醒,且print_tag不为true
printf("world\n");
print_tag = true;
cv1.notify_one();
}
}
int main(){
thread thread1(hello);
thread thread2(world);
thread1.join();
thread2.join();
return 0;
}
C++ 多线程下两个子线程交替执行
于 2024-01-24 23:29:03 首次发布