//編寫一個程序,開啟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; }