#include "futex.h"
Go to the source code of this file.
Defines | |
#define | _BEGIN_TX __tm_atomic |
#define | _END_TX |
#define | txc_cond_event_inc_loops(_ev_) txc_cond_event_inc(_ev_) |
#define | LABEL_CAT(a, b) LABEL_CAT_I(a, b) |
#define | LABEL_CAT_I(a, b) a ## b |
#define | NEXT_LABEL(T) LABEL_HELPER(T,LABEL_CAT(label,__LINE__)) |
#define | LABEL_HELPER(T, L) do { T = &&L; L: __dummy = 0;} while(0) |
#define | COND_XACT_BEGIN |
#define | COND_XACT_END |
#define | txc_cond_wait_label(_cvar_, _label_) |
#define | txc_cond_wait(_cvar_) |
Notes on condition variables:
Definition in file condvar.h.
#define COND_XACT_BEGIN |
Value:
{ \ int __do_wait = 0, __cond_val, __do_exit = 0; \ int __dummy = 0; \ txc_cond_event_t * __cond_var; \ void * __wait_label; \ void * __begin_label; \ do { \ if (__do_wait) { \ txc_cond_event_deferred_wait(__cond_var,__cond_val); \ } \ _BEGIN_TX { \ NEXT_LABEL(__begin_label); \ if (!__do_exit) { \ if (__do_wait) { \ __do_wait = 0; \ goto *__wait_label; \ }
#define COND_XACT_END |
#define txc_cond_wait | ( | _cvar_ | ) |
Value:
do { \ txc_cond_event_inc_loops( _cvar_ ); \ txc_cond_wait_label( _cvar_, LABEL_CAT(__txc_cond_wait_, __LINE__)); \ } while (0)
#define txc_cond_wait_label | ( | _cvar_, | |||
_label_ | ) |
Value:
{ \ __cond_var = (_cvar_); \ __cond_val = txc_cond_event_get(_cvar_); \ __do_wait = 1; \ __do_exit = 1; \ __wait_label = && _label_; \ goto *__begin_label; \ _label_: \ __dummy = 0; \ }