スレッド サニタイザー ( http://code.google.com/p/data-race-test/wiki/ThreadSanitizer#Using_ThreadSanitizer )を試してみようと思った ので、簡単なプログラムを作成しました。
#include <thread>
#include <atomic>
#include <vector>
#include <iostream>
#include <algorithm>
#include <mutex>
using namespace std;
int violated=0;
mutex mtx;
void violator()
{
lock_guard<mutex> lg(mtx);
violated++;
}
int main()
{
thread t1(violator);
t1.join();
thread t2(violator);
t2.join();
}
違反へのアクセスはミューテックスと同期されているため、AFAIKプログラムは問題ありません(そして、そのプログラムがなくてもレースフリーであるとコメントのように言います)。しかし、tsan は不平を言い、たくさんの警告を出します: http://www.filedropper.com/output では、ツールの使い方が間違っているのでしょうか? 重要な場合は、VS11 Beta を使用しています。