condition_variable-介紹和使用


 

//編寫一個程序,開啟3個線程,這3個線程的ID分別為A、B、C,每個線程將自己的ID在屏幕
#include<iostream>
#include <thread>
#include <condition_variable>
#include<mutex>
#include <string.h>
int num = 0;
std::mutex _mutex;
std::condition_variable cv;

void thread_func(int id)
{
    for (int i = 0; i < 10; i++)
    {
        //注意鎖的類型
        std::unique_lock <std::mutex> lg(_mutex);

        //線程id!=num的會被阻塞
        while (id != num)
            cv.wait(lg);

        printf("%c", id + 'A');
        num = (num + 1) % 3;
        //當線程號為id的線程執行完之后,喚醒其它線程重新競爭鎖
        cv.notify_all();
    }
}

int main()
{
    int i;
    std::thread p[3];
    //創建三個線程,分別負責打印ABC
    for (i = 0; i < 3; i++)
        p[i] = std::thread(thread_func, i);
    for (i = 0; i < 3; i++)
        p[i].join();
    system("pause");
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM