0
以下代碼導致VS2012 Express和gcc 4.7.2的不同輸出,這是ideone使用的輸出。爲了記錄,我試着用MinGW編譯,但它沒有實現C++ 11的<互斥體>,如here所述。即使鎖定失敗,應使用try_to_lock的unique_lock是否擁有互斥鎖?
#include <mutex>
#include <iostream>
int main()
{
std::mutex m;
{
std::unique_lock<std::mutex> l(m, std::try_to_lock);
std::cout << (bool)l <<std::endl;
}
{
m.lock();
std::unique_lock<std::mutex> l(m, std::try_to_lock);
std::cout << (bool)l <<std::endl;
}
}
在visual studio中,第二個測試打印0,這意味着鎖不擁有互斥鎖,因爲它已經被鎖定。
使用gcc,第二次測試會打印1,表示即使已經鎖定,該鎖也獲得了互斥量,如std::adopt_lock
。
哪一個是正確的?