下面是一个示例的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;
}

在上面的示例中,有两个线程 threadFunc1threadFunc2。它们都会等待控制权来执行工作,然后释放控制权,以便另一个线程可以执行工作。

main 函数中,我们创建了两个线程 t1t2,然后初始化控制权并通知一个线程开始工作。然后,我们使用 join 函数等待两个线程完成它们的工作,并结束程序的执行

同一进程的两个线程在工作中的切换和控制给一下示例C++源代码

原文地址: https://www.cveoy.top/t/topic/ixjT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录