#include #include #include #include atomic_int i = 0; void* thread_func(void* arg) { int local, new; do { local = atomic_load(&i); new = (local + 1) % 16; } while (!atomic_compare_exchange_strong(&i, &local, new)); printf("%i: %i\n", (int)arg, new); } int main(void) { pthread_t id[20]; for (int i = 0; i < 20; i++) { // korrekt mit free int* idref = malloc(sizeof(id)); *idref = i; pthread_create(&id[i], NULL, thread_func, (void*)i); // (void*)i ist verboten! } }