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

Reply via email to