我想尝试线程消毒剂( 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。