同一进程的两个线程在工作中的切换和控制给一下示例C++源代码
下面是一个示例的C++源代码,展示了同一进程中两个线程的切换和控制:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool isReady = false;
void threadFunc1() {
std::cout << "Thread 1 is running." << std::endl;
std::unique_lock<std::mutex> lock(mtx);
// 等待控制权
cv.wait(lock, []{ return isReady; });
// 执行工作
std::cout << "Thread 1 is working." << std::endl;
// 释放控制权
isReady = false;
cv.notify_one();
}
void threadFunc2() {
std::cout << "Thread 2 is running." << std::endl;
std::unique_lock<std::mutex> lock(mtx);
// 等待控制权
cv.wait(lock, []{ return !isReady; });
// 执行工作
std::cout << "Thread 2 is working." << std::endl;
// 释放控制权
isReady = true;
cv.notify_one();
}
int main() {
std::thread t1(threadFunc1);
std::thread t2(threadFunc2);
// 初始化控制权
isReady = true;
cv.notify_one();
t1.join();
t2.join();
return 0;
}
在上面的示例中,有两个线程 threadFunc1 和 threadFunc2。它们都会等待控制权来执行工作,然后释放控制权,以便另一个线程可以执行工作。
在 main 函数中,我们创建了两个线程 t1 和 t2,然后初始化控制权并通知一个线程开始工作。然后,我们使用 join 函数等待两个线程完成它们的工作,并结束程序的执行
原文地址: https://www.cveoy.top/t/topic/ixjT 著作权归作者所有。请勿转载和采集!