Esempio n. 1
0
void SIGTERM_handler(int sig)
{
    if( atomic_load_explicit( &guide, memory_order_relaxed) == 1)
    {
       atomic_signal_fence(memory_order_acquire);
       int d = atomic_load_explicit( &data, memory_order_relaxed);
       assert(d == 100);               // Condition fulfilled!
    // ...
    }
    _Exit(0);
}
Esempio n. 2
0
int main(void)
{
    if( signal(SIGTERM, SIGTERM_handler) == SIG_ERR)
       perror("signal"), exit(1);
// ...
    atomic_store_explicit( &data, 100, memory_order_relaxed);
    atomic_signal_fence( memory_order_release);
    atomic_store_explicit( &guide, 1, memory_order_relaxed);
// ...
    return 0;
}
Esempio n. 3
0
TEST(stdatomic, atomic_signal_fence) {
  atomic_signal_fence(memory_order_relaxed);
  atomic_signal_fence(memory_order_consume);
  atomic_signal_fence(memory_order_acquire);
  atomic_signal_fence(memory_order_release);
  atomic_signal_fence(memory_order_acq_rel);
  atomic_signal_fence(memory_order_seq_cst);
}
int main(int argc, char** argv)
{
  atomic_bool flag;

  atomic_store_bool(&flag, false);
  assert( false == atomic_exchange_bool(&flag, true) );
  assert( true == atomic_exchange_bool(&flag, true) );

  atomic_thread_fence(memory_order_seq_cst);
  atomic_signal_fence(memory_order_seq_cst);

  {
    atomic_uint_least8_t tmp;
    atomic_load_uint_least8_t(&tmp);
  }
  /*
  test(uint_least8_t);
  test(uint_least16_t);
  test(uint_least32_t);
  test(uint_least64_t);
  test(uintptr_t);
  */
  return 0;
}
Esempio n. 5
0
int
main ()
{
  atomic_thread_fence (memory_order_relaxed);
  atomic_thread_fence (memory_order_consume);
  atomic_thread_fence (memory_order_acquire);
  atomic_thread_fence (memory_order_release);
  atomic_thread_fence (memory_order_acq_rel);
  atomic_thread_fence (memory_order_seq_cst);

  atomic_signal_fence (memory_order_relaxed);
  atomic_signal_fence (memory_order_consume);
  atomic_signal_fence (memory_order_acquire);
  atomic_signal_fence (memory_order_release);
  atomic_signal_fence (memory_order_acq_rel);
  atomic_signal_fence (memory_order_seq_cst);

  return 0;
}