C++11多執行緒超賣問題
阿新 • • 發佈:2019-01-27
#include <thread> #include <mutex> #include <iostream> #include <vector> void Fun_1(); void Fun_2(); unsigned int counter = 1; std::mutex mtx; void my_fun(int i) { while (true) { std::lock_guard<std::mutex> mtx_locker(mtx); ++counter; if (counter < 1001) { std::cout << "視窗 "<<i<<" 正在賣第 " << counter << " 張票...還剩"<<(1000-counter)<<"張票\n"; } else { break; } //std::this_thread::sleep_for(std::chrono::microseconds(1)); } } void my_test() { std::vector<std::thread *> vt(10); for(auto i=0;i<10;++i){ vt[i]=new std::thread(my_fun,i+1); } for(auto i=0;i<10;++i){ vt[i]->join(); } for(auto i=0;i<10;++i){ delete vt[i]; } } void test() { std::thread thrd_1(Fun_1); std::thread thrd_2(Fun_2); thrd_1.join(); thrd_2.join(); std::cin.get(); } void Fun_1() { while (true) { std::lock_guard<std::mutex> mtx_locker(mtx); ++counter; if (counter < 1000) { std::cout << "Function 1 counting " << counter << "...\n"; } else { break; } } } void Fun_2() { while (true) { std::lock_guard<std::mutex> mtx_locker(mtx); ++counter; if (counter < 1000) { std::cout << "Function 2 counting " << counter << "...\n"; } else { break; } } }