Hi
One more question:
% cat missed_race.cc
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
// In this test we do the following:
// parent...........................worker
// 1. pthread_create(worker) a. sleep(sleep_worker)
// 2. sleep(sleep_parent) b. print(GLOB)
// 3. GLOB = 1
// The behaviour of helgrind depends on values of
// sleep_parent/sleep_worker.
// If the values are close (sleep_parent=1000, sleep_worker=2000),
// detection of the race actually depends on luck.
// On my system it is detected 1 of 4-5 of times.
//
// If the parent gets to 'GLOB=1' first, then no race is detected.
// We have Exclusive(parent)->ShR(parent,worker)
//
// If the worker gets to print(GLOB) first, then the race is reported.
// We have Exclusive(worked)->ShM({parent,worker}, {empty lockset})
//
// This race should (IMHO) be detected independently of sleep values.
// Do we need to have ExclusiveR and ExclusiveW instead of just Exclusive?
int GLOB = 0;
const int sleep_parent=1000;
const int sleep_worker=2000;
void *worker(void*)
{
usleep(sleep_worker);
printf("GLOB=%d\n", GLOB);
return NULL;
}
int main(int argc, char **argv)
{
pthread_t threadid;
pthread_create(&threadid, NULL, worker, NULL);
usleep(sleep_parent);
GLOB = 1;
pthread_join(threadid, NULL);
}
/*
% g++ -g missed_race.cc -lpthread
% for((i=1; i <= 10; i++)); do echo ---------- $i;
~/race/valgrind32orig/Inst/bin/valgrind -q --tool=helgrind ./a.out 2>&1 |
grep -A 5 Possible; done
---------- 1
---------- 2
---------- 3
---------- 4
---------- 5
---------- 6
==13246== Possible data race during write of size 4 at 0x8049850
==13246== at 0x8048585: main (missed_race.cc:40)
==13246== Old state: owned exclusively by thread #2
==13246== New state: shared-modified by threads #1, #2
==13246== Reason: this thread, #1, holds no locks at all
GLOB=0
---------- 7
---------- 8
==13254== Possible data race during write of size 4 at 0x8049850
==13254== at 0x8048585: main (missed_race.cc:40)
==13254== Old state: owned exclusively by thread #2
==13254== New state: shared-modified by threads #1, #2
==13254== Reason: this thread, #1, holds no locks at all
GLOB=0
---------- 9
---------- 10
%
*/
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers