is multithreading swapping 2 predefined pointer to one static variable causing memory error?
been reference this link -> https://gist.github.com/Taymindis/3938e917aaae4fc480386f494be62f0e and do some valgrind check, it has no error. But I just want to double confirm is this example below consider thread safe? I've personally vagrind check, it has no error, Does anyone has any better idea? #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h> #define THREAD_RUN 100 static char *global; static char *x1 = "This is thread 1"; static char *x2 = "This is thread 2"; void * write(void* thr_data) { int n = *(int*)thr_data; if(n%2==0) goto RETRY1; else goto RETRY2; RETRY1: for (n = 0; n < 1000; ++n) { global = x1; } goto RETRY1; RETRY2: for (n = 0; n < 1000; ++n) { global = x2; } goto RETRY2; // free(cu); return 0; } void * read(void* thr_data) { int n; RETRY: for (n = 0; n < 1000; ++n) { if(global[0] == 'C'); } goto RETRY; return 0; } int main(void) { int n; pthread_t read_thr[THREAD_RUN]; pthread_t write_thr[THREAD_RUN]; global = x1; for (n = 0; n < THREAD_RUN; ++n) { pthread_create(&write_thr[n], NULL, write, &n); pthread_create(&read_thr[n], NULL, read, &n); } for (n = 0; n < THREAD_RUN; ++n) pthread_join(read_thr[n], NULL); for (n = 0; n < THREAD_RUN; ++n) pthread_join(write_thr[n], NULL); }