Page 63 - C-Language
P. 63

Atomic variables can be accessed concurrently between different threads without creating race
        conditions.


         /* a global static variable that is visible by all threads */
         static unsigned _Atomic active = ATOMIC_VAR_INIT(0);


         int myThread(void* a) {
           ++active;         // increment active race free
           // do something
           --active;         // decrement active race free
           return 0;
         }


        All lvalue operations (operations that modify the object) that are allowed for the base type are
        allowed and will not lead to race conditions between different threads that access them.

            •  Operations on atomic objects are generally orders of magnitude slower than normal
              arithmetic operations. This also includes simple load or store operations. So you should only
              use them for critical tasks.
            •  Usual arithmetic operations and assignment such as a = a+1; are in fact three operations on

              a: first a load, then addition and finally a store. This is not race free. Only the operation a +=
              1; and a++; are.


        Read Atomics online: https://riptutorial.com/c/topic/4924/atomics



















































        https://riptutorial.com/                                                                               39
   58   59   60   61   62   63   64   65   66   67   68