я думал попробовать нить дезинфицирующее (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 в порядке, так как доступ к нарушаться синхронизируется с мьютекс (и подобные комментарии говорят, что даже без этой программы гонки свободно). Но цзан жалуется и дает кучу предупреждений: http://www.filedropper.com/output Так я использую инструмент неправильно или это не очень хорошо? Если важно, я использую VS11 Beta.
Программа была бы правильной даже без какой-либо синхронизации ... –
Я догадался, я думаю, что первого соединения достаточно ... Я просто хотел быть уверенным. Ofc требуется второе соединение. – NoSenseEtAl
Оба соединения необходимы, но так, как вы его написали, нет параллелизма. –