以下代码使用 VS2012 Express 和 gcc 4.7.2 产生不同的输出,这是ideone使用的。作为记录,我尝试使用 MinGW 进行编译,但它没有实现 C++11 的 <mutex> ,如此处所述。
#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
.
哪一个是正确的?