如何实现两个线程交替打印,我们可以用互斥锁和条件变量来实现。具体步骤如下:
-
定义两个共享变量flag和count,flag用于判断当前线程是否能够打印,count用于计数。
-
初始化互斥锁和条件变量。
-
定义两个打印函数:printA()和printB(),并在其中加入互斥锁和条件变量的控制。
-
创建两个线程,分别执行printA()和printB()。
以下是详细的代码实现:
#include <mutex>
#include <condition_variable>
#include <thread>
#include <iostream>
using namespace std;
// 定义两个共享变量
int flag = 1;
int count = 1;
// 定义互斥锁和条件变量
mutex mtx;
condition_variable cv;
// 定义打印函数
void printA() {
unique_lock<mutex> lock(mtx);
while (count <= 10) {
// 如果flag不为1则等待
while (flag != 1) {
cv.wait(lock);
}
cout << "Thread A: " << count << endl;
++count;
flag = 2;
// 通知等待条件变量的线程
cv.notify_all();
}
}
void printB() {
unique_lock<mutex> lock(mtx);
while (count <= 10) {
// 如果flag不为2则等待
while (flag != 2) {
cv.wait(lock);
}
cout << "Thread B: " << count << endl;
++count;
flag = 1;
// 通知等待条件变量的线程
cv.notify_all();
}
}
int main() {
thread t1(printA);
thread t2(printB);
t1.join();
t2.join();
return 0;
}
以上代码通过互斥锁和条件变量来实现了两个线程的交替打印数字。
示例1(输出结果可能有所不同):
Thread A: 1
Thread B: 2
Thread A: 3
Thread B: 4
Thread A: 5
Thread B: 6
Thread A: 7
Thread B: 8
Thread A: 9
Thread B: 10
示例2(输出结果可能有所不同):
Thread B: 1
Thread A: 2
Thread B: 3
Thread A: 4
Thread B: 5
Thread A: 6
Thread B: 7
Thread A: 8
Thread B: 9
Thread A: 10
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++详解如何实现两个线程交替打印 - Python技术站