Hi

I know that global variables in DTrace are unprotected, and that
generally accessing them by multiple threads is unsafe.  However, I
think that I have a case in which it would be o.k to share a global
variable between threads, and wanted your advice about that.

In my case I need a 0/1 indicator that goes once from 0 to 1.  Thus, all
the threads may run the following DTrace clause:


int indicator;

<some probe that may fire for multiple therads>
/indicator == 0/
{
  indicator = 1;
}

I don't really know how global variable are implemented in DTrace, but I
believe that this usage pattern should be safe, and guarantee that the
variable at the end of the run is 1 if and only if the above probe fired
for at least one thread --- right?  (Even though the reading of
indicator in the predicate is not atomic with writing it, the worst that
can happen is that multiple threads will write the variable to 1
concurrently, which I hope is safe.)

Now, for the more tricky question: what if I would like to use the same
pattern with an associative array, where each element in the array is a
global indicator?  That is, the clause above would look something like: 

int indicators[int];

<some probe that may fire for multiple therads>
/indicators[arg0] == 0/
{
  indicators[arg0] = 1;
}

Is it still safe? The main reason I'm asking is that I do not know how
associative arrays are implemented in DTrace, and I can definitely
imagine an implementation that will make the above example unsafe
(e.g. if the array is implemented with a hashtable that can overflow and
be resized without taking into account concurrent lookup/assignments by
other threads).  Can someone tell me if the above pattern is safe?

What I basically need is to keep track of whether an event happened and
change the script behavior once it does, but there are many different
events which is why I would like to use an array of global indicators,
indexed by the event id.

Thanks,
Yossi
-- 
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to