私はmutexを使用してpthreadをテストしようとしていました:
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
int global = 0;
void thread_set();
void thread_read();
int main(void){
pthread_t thread1, thread2;
int re_value1, re_value2;
int i;
for(i = 0; i < 5; i++){
re_value1 = pthread_create(&thread1,NULL, (void*)&thread_set,NULL);
re_value2 = pthread_create(&thread2,NULL,(void*)&thread_read,NULL);
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
/* sleep(2); */ // without it the 5 iteration couldn't finish
printf("exsiting\n");
exit(0);
}
void thread_set(){
pthread_mutex_lock(&mutex1);
printf("Setting data\t");
global = rand();
pthread_mutex_unlock(&mutex1);
}
void thread_read(){
int data;
pthread_mutex_lock(&mutex1);
data = global;
printf("the value is: %d\n",data);
pthread_mutex_unlock(&mutex1);
}
がないsleep()
と、コードは5回の反復を終了しません。
設定データ値は次のとおりです:1804289383値は次のとおりです:1804289383設定データ値は次のとおりです:846930886既存
設定データ値は次のとおりです:1804289383設定データ値は次のとおりです:846930886値は次のとおりです:846930886既存
これは、sleep()をメインスレッドに追加するだけでsleep()
機能します。join()関数は各子スレッドが終了するのを待つため、なしでも機能するはずです。
なぜだと誰でも教えてくれますか?