Julian, all, any ideas on this?
[ I am sorry for disturbing you... But just in case you've missed this
message...]

--kcc

On Dec 6, 2007 12:23 PM, Konstantin Serebryany
<[EMAIL PROTECTED]>
wrote:

> 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:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services
for just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to