linux c++は2つのスレッドを交互に1~100印刷することを実現する


構想:条件変数を使用して、1つのスレッドがcountを待って奇数になり、1つのスレッドがcountを待って偶数になります.
#include 
#include 
#include 
#include 

pthread_cond_t cond_odd = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond_even = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex_x = PTHREAD_MUTEX_INITIALIZER;

int kCount = 1;

void * countOdd(void * arg){
    for(int i=0; i<100;i++){
        pthread_mutex_lock(&mutex_x);
        if(kCount < 100){
            //   kCount   ,  
            if((kCount%2) == 0) pthread_cond_wait(&cond_odd, &mutex_x);
            //     
            printf("Current Thread: %s, Current Count: %d.
"
, (char *)arg, kCount); // kCount++; if((kCount%2) == 0){ pthread_cond_signal(&cond_even); } } pthread_mutex_unlock(&mutex_x); } } void * countEven(void *arg){ for(int i=0;i<100;i++){ pthread_mutex_lock(&mutex_x); if(kCount < 100){ // kCount , if((kCount%2) == 1) pthread_cond_wait(&cond_even, &mutex_x); // printf("Current Thread: %s, Current Count: %d.
"
, (char*)arg, kCount); // kCount++; if((kCount%2) == 1){ pthread_cond_signal(&cond_odd); } } pthread_mutex_unlock(&mutex_x); } } int main(int argc, char* argv[]){ pthread_t tids[2]; int i; if(pthread_create(&tids[0], NULL, countOdd, (void*)("1"))){ printf("pthread_creat_error"); } if(pthread_create(&tids[1], NULL, countEven, (void*)("2"))){ printf("pthread_creat_error"); } sleep(3); for(i = 0;i < 2; i++){ if(pthread_join(tids[i], NULL)){ printf("pthread_join error"); return -1; } } return 0; }