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;
}

 

posted @ 2020-04-25 17:26  知道了呀~  阅读(1429)  评论(0编辑  收藏  举报