線程考慮一個簡單的例子同意:訂單在執行
#include <iostream> // std::cout
#include <thread> // std::thread
#include <mutex> // std::mutex
std::mutex mtx; // mutex for critical section
void print_block(int n, char c) {
// critical section (exclusive access to std::cout signaled by locking mtx):
mtx.lock();
for (int i = 0; i<n; ++i) { std::cout << c; }
std::cout << '\n';
mtx.unlock();
}
int main()
{
std::thread th1(print_block, 50, '*');
std::thread th2(print_block, 50, '$');
th1.join();
th2.join();
return 0;
}
是否總是保證th1
將執行for循環的第一個線程?
意思是,當我這樣做:
th1.join();
th2.join();
那我可以絕對確保th1
將先執行?
當處理併發編程時,不要對執行順序做任何假設。相反,假設所有情況都是可能的。這使得你的代碼更加可靠,反而更簡單。 –
[你正在使用'std :: mutex'錯誤](http://kayari.org/cxx/antipatterns.html#locking-mutex),你不應該調用'std :: mutex :: lock()'和'的std ::互斥::解鎖()'。相反,在'print_block()'開始時創建'std :: lock_guard'並讓它爲你鎖定和解鎖互斥鎖。 –