diff --git a/atomics.c b/atomics.c new file mode 100644 index 0000000..4ff5e5d --- /dev/null +++ b/atomics.c @@ -0,0 +1,43 @@ +#include +#include +#include + +atomic_int x; // _Atomic int + +int thread1(void *arg) { + (void)arg; + + printf("Thread 1: Sleeping for 1.5 seconds\n"); + thrd_sleep(&(struct timespec){.tv_sec = 1, .tv_nsec = 500000000}, NULL); + + printf("Thread 1: Setting x to 3490\n"); + x = 3490; + + printf("Thread 1: Exiting\n"); + return 0; +} + +int thread2(void *arg) { + (void)arg; + + printf("Thread 2: Waiting for 3490\n"); + while (x != 3490); // spin here + + printf("Thread 2: Got 3490--exiting!\n"); + return 0; +} + +int main(void) { + x = 0; + + thrd_t t1, t2; + + thrd_create(&t1, thread1, NULL); + thrd_create(&t2, thread2, NULL); + + thrd_join(t1, NULL); + thrd_join(t2, NULL); + + printf("Main : Threads are done, so x better be 3490\n"); + printf("Main : And indeed, x == %d\n", x); +}