1
我這個最小的代碼:爲什麼鎖不鎖?
#include <mutex>
#include <iostream>
std::mutex themutex;
void f1()
{
std::cout << "1" << std::endl;
std::lock_guard<std::mutex> local_mutex(themutex);
std::cout << "2" << std::endl;
}
void f2()
{
std::cout << "3" << std::endl;
std::lock_guard<std::mutex> local_mutex(themutex);
std::cout << "4" << std::endl;
f1();
std::cout << "5" << std::endl;
}
int main(void)
{
f2();
return 0;
}
我編譯和
g++ -std=c++11 test_mutex.cc -o test_mutex && ./test_mutex
運行,我得到這個輸出:
3
4
1
2
5
爲什麼?
我希望程序在打印「1」後鎖定,永不返回。
謝謝。只是爲了確保我明白:我,即程序員,必須確保我只嘗試調用鎖,創建一個本地鎖,每個線程最多一次。正確? – steffen
@steffen:是的。如果這不可行,你可以使用'std :: recursive_mutex'。 –