#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
#include <unistd.h>
void *print_message_function( void *ptr );
int counter = 0;
pthread_rwlock_t rwlock; //ロック変数
int main(){
pthread_t thread1, thread2;
char *message1 = "Thread 1";
char *message2 = "Thread 2";
int ret1, ret2;
//シード値初期化
srand((unsigned)time(NULL));
//ロックの初期化
pthread_rwlock_init(&rwlock, NULL);
//スレッドの生成
ret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
ret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);
//スレッドの終了待ち
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
printf("Thread 1 returns: %d\n", ret1);
printf("Thread 2 returns: %d\n", ret2);
exit(0);
}
void *print_message_function( void *ptr ){
char *message;
message = (char *) ptr;
int stime = rand()%1000;
for(int i = 0; i < 100; i++){
usleep(stime);
pthread_rwlock_wrlock(&rwlock);
counter++;
printf("%s:%d \n", message, counter);
pthread_rwlock_unlock(&rwlock);
}
return NULL;
}