【发布时间】:2012-04-23 02:15:15
【问题描述】:
我想试试线程消毒剂 (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 程序没问题,因为对违反的访问与互斥锁同步(就像 cmets 说的那样,即使没有该程序也是无种族的)。 但是 tsan 抱怨并给出了一堆警告: http://www.filedropper.com/output 那么我使用该工具是错误的,还是它不是很好? 如果重要的话,我正在使用 VS11 Beta。
【问题讨论】:
-
即使没有任何同步,程序也是正确的......
-
我猜是这样,我想第一次加入就足够了……我只是想确定一下。需要 Ofc 第二次加入。
-
两个连接都是需要的,但是你写它的方式没有并发。
-
我知道,首先我尝试只拥有一个稍后加入的线程向量,因此有一个 RC,它给出了应有的警告,但后来我决定尝试正常的非 RC 案例.
标签: c++ race-condition