4 #include "threads-model.h"
8 bool atomic_flag_test_and_set_explicit ( volatile atomic_flag * __a__, memory_order __x__ ) {
9 volatile bool * __p__ = &((__a__)->__f__);
10 model->switch_to_master(new ModelAction(ATOMIC_RMWR, __x__, (void *) __p__));
11 bool result = (bool) thread_current()->get_return_value();
12 model->switch_to_master(new ModelAction(ATOMIC_RMW, __x__, (void *) __p__, true));
16 bool atomic_flag_test_and_set( volatile atomic_flag* __a__ )
17 { return atomic_flag_test_and_set_explicit( __a__, memory_order_seq_cst ); }
19 void atomic_flag_clear_explicit
20 ( volatile atomic_flag* __a__, memory_order __x__ )
22 volatile bool * __p__ = &((__a__)->__f__);
23 model->switch_to_master(new ModelAction(ATOMIC_WRITE, __x__, (void *) __p__, false));
26 void atomic_flag_clear( volatile atomic_flag* __a__ )
27 { atomic_flag_clear_explicit( __a__, memory_order_seq_cst ); }
29 void atomic_flag_fence( const volatile atomic_flag* __a__, memory_order __x__ )
34 void __atomic_flag_wait__( volatile atomic_flag* __a__ )
35 { while ( atomic_flag_test_and_set( __a__ ) ); }
37 void __atomic_flag_wait_explicit__( volatile atomic_flag* __a__,
39 { while ( atomic_flag_test_and_set_explicit( __a__, __x__ ) ); }