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; }
等风起的那一天,我已准备好一切