linux-のセマフォスレッド同期

1.タスク:端末から任意の文字のユーザ入力と表示される文字の数、入力端の端を数えます

2.マルチスレッド:メインスレッドは、ユーザ入力を取得し、サブスレッドカウントを終了するか否かを判断します

1つの#include <stdio.hの>
 2の#include < 文字列・H>
 3の#include <STDLIB.H>
 4の#include <pthread.hの>
 5の#include <semaphore.h>
 。6  
。7  チャー BUF [ 200は = {] 0 };
 8  sem_t SEM;
 9  ボイド * FUNC(ボイド * アルギニン);
 10  // サブスレッドのプログラム、統計の役割は、文字や印刷BUFの数である
11。 ボイド * FUNC(ボイド * のArg)
 12は 、{
 13は     // 子スレッド最初に起動メインスレッドを待っている間、ループに遮断するサイクルを有するべきである;
 14      //BUFの文字長を取得するサブスレッドを活性化された後、次に、印刷、印刷後に再び遮ら
15      sem_wait(&のSEM)を、
 16      ながら(strncmpは(BUF、終了3。 )!= 0 17      {
 18であります          printf(" N- \%d文字を入力する" 、(BUF)strlenを)
 。19          のmemset(BUF、0はsizeof (BUF));
 20は          sem_wait(&からSEM);
 21れる     }
 22は、     pthread_exit(NULL); 
 23である }
 24  
25  INTメイン(無効26は、 {
 27      のint RET = - 1 ;
 28      がpthread_t TH = - 1。;
 29      
30      sem_init(&SEM、00 );
 31である     
32      RET =のpthread_create(&TH、NULL、FUNC、NULL);
 33は、     IF(RET =!0 34である     {
 35          のprintf(" pthread_createのエラーの\ n " );
 36          終了( - 1 );
 37      }
 38は、     
39      のprintf(" 文字を入力してください、キャリッジリターン\ nを" );
 40      ながら(scanfの(" %S "BUF))
 41である    {
 42れる// ユーザー入力がある場合、出口次いで、端であるか否かを判定し、そうでない場合、43はIF!(strncmpは(BUF、" 終了" 3 ))
 44         {
 45 // 入力端である46である              のprintf(" プログラム\のN-末端' ;)
 47              sem_post(&SEM); // 活性化セマフォ48 BREAK ;
 49         }
 50 // メインスレッドはユーザを受け取ります入力文字列と確認がない終了後、シグナル活性化スレッド数を行きます
          
                       

                       51          // 子スレッドがブロックされ、メインスレッドを起動することができ、そのスレッドの同期で
 52の         // セマフォは、この同期スレッド達成するために使用することができる
53れる          sem_post(&SEM); // 起動セマフォ
54は、         
55      }
 56である     
57れる     // サブスレッド回復
58に      (のprintf "\ N-子スレッドの回復を待っている" );
 59      RET = pthread_joinを(TH、NULL);    
 60      のIF(RET =!0 61である     {
 62です          (printfの" N- \ pthread_joinをエラー。" );
 ている63          出口( - 1 );
 64      }
65      のprintf(" N- \子スレッド復旧成功。" );
 66      
67      sem_destroy(&SEM);
 68      リターン 0 ;
 69 }

 

おすすめ

転載: www.cnblogs.com/jiangtongxue/p/11307314.html