#include #include #include static bool value_set; static int value; // Set the value to the integer pointed to by args static void* ValueSetter(void* args) { int value_to_set = *(int*) args; if (!value_set) { value = value_to_set; value_set = true; } return NULL; } int main(int argc, char* argv[]) { value_set = false; pthread_t p1, p2; int p1_value = 10; int p2_value = 20; pthread_attr_t pthread_attributes; pthread_attr_init(&pthread_attributes); pthread_attr_setdetachstate(&pthread_attributes, PTHREAD_CREATE_JOINABLE); if (pthread_create(&p1, NULL, &ValueSetter, &p1_value) != 0 || pthread_create(&p2, NULL, &ValueSetter, &p2_value) != 0) { perror("Creating a thread failed"); return 1; } pthread_attr_destroy(&pthread_attributes); void* return_value; if (pthread_join(p1, &return_value) != 0 || pthread_join(p2, &return_value) != 0) { perror("Joining with a thread failed"); return 1; } printf("Value is %d\n", value); return 0; }