The following code can download from [Linux Programer] 1
C code
/**
*
* Simple Pthread synchronize
*
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_function(void *arg);
int run_now = 1;
char message[] = "Hello World";
int main() {
int res;
pthread_t a_thread;
void *thread_result;
int print_count1 = 0;
/* Start to create pthread */
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
/* one pthread go here */
while(print_count1++ < 20) {
if (run_now == 1) {
printf("1");
run_now = 2; /* When run_now set to 2, then wait for another pthread to execute */
}
else {
sleep(1);
}
}
/* Finish pthread */
printf("\nWaiting for thread to finish...\n");
res = pthread_join(a_thread, &thread_result);
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined\n");
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {
int print_count2 = 0;
while(print_count2++ < 20) {
if (run_now == 2) {
printf("2");
run_now = 1;
}
else {
sleep(1);
}
}
sleep(3);
}
Result
We can understand pthread execute one by one. This synchronize code take too much time.
12121212121212
Waiting for thread to finish...
Thread joined
0 意見:
張貼留言