X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu.h;h=c77b26f958e34b8521f1b8363d83b6492cb46b0f;hp=2aa35977036d9432884206983c21b6bc686b9cf0;hb=9d335088c7c7eb6219e32ec9426d336f3a211a77;hpb=cf380c2fd2f85e3fba4826991fb748255bdc9b76 diff --git a/urcu.h b/urcu.h index 2aa3597..c77b26f 100644 --- a/urcu.h +++ b/urcu.h @@ -72,18 +72,26 @@ static inline void atomic_inc(int *v) #define YIELD_READ (1 << 0) #define YIELD_WRITE (1 << 1) -extern int yield_active; +extern unsigned int yield_active; +extern unsigned int __thread rand_yield; static inline void debug_yield_read(void) { if (yield_active & YIELD_READ) - sched_yield(); + if (rand_r(&rand_yield) & 0x1) + sched_yield(); } static inline void debug_yield_write(void) { if (yield_active & YIELD_WRITE) - sched_yield(); + if (rand_r(&rand_yield) & 0x1) + sched_yield(); +} + +static inline void debug_yield_init(void) +{ + rand_yield = time(NULL) ^ pthread_self(); } #else static inline void debug_yield_read(void) @@ -92,6 +100,11 @@ static inline void debug_yield_read(void) static inline void debug_yield_write(void) { +} + +static inline void debug_yield_init(void) +{ + } #endif