言語/C/サンプルプログラム/マルチスレッド

#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;
}

  • 最終更新:2014-10-10 17:37:09

このWIKIを編集するにはパスワード入力が必要です

認証パスワード