2014年6月27日 星期五

[Pthread] Simple Pthread synchronize


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

Reference


0 意見:

張貼留言