次のコードは、VS2012Expressとgcc4.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では、2番目のテストは0を出力します。これは、ロックが既にロックされているため、ロックがミューテックスを所有していないことを意味します。
gccを使用すると、2番目のテストは1を出力します。これは、のように、すでにロックされている場合でも、ロックがミューテックスを取得したことを意味しstd::adopt_lock
ます。
どちらが正しいですか ?