C++學習:第六章Linux高階程式設計 - (十三)執行緒的訊號量、鎖、私有資料

Thomas會寫字發表於2020-12-25

回顧:

執行緒與程式

      1. 程式由於資源獨立,程式的主要關注是解決資源共享

      2. 執行緒先天是資料共享,執行緒主要關注共享資料髒

              1.互斥量(執行緒內)

                     讀寫鎖

      3. 訊號/條件量排程(執行緒之間)

訊號量

 

一、 執行緒的訊號量

  1. 定義訊號量    sem_t
  2. 初始化訊號量       sem_init
  3. 操作訊號量    sem_post  sem_wait
  4. 釋放訊號量    sem_destroy       
  5. 其他函式        sem_getvalue 用來測試訊號量的值

            int sem_getvalue(sem_t *sem,int *valp)

            引數:sem為訊號燈指標,valp為訊號燈的值

            返回值:成功時,返回0,失敗,-1

      案例:

            建立一個子執行緒

                 子執行緒-訊號量(阻塞)

                  主執行緒+訊號量(解除阻塞)

            體會:

                  訊號量可以累加

                  +-操作單位是1

#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>

sem_t  sem;//

void *run(void*d)
{
while(1)
{
//3.
sem_wait(&sem);
printf("解除\n");
}
}

main()
{
    pthread_t tid;

    //2
    sem_init(&sem,0,5);
    pthread_create(&tid,0,run,0);

    while(1)
    {
        //
        sleep(1);
        sem_post(&sem);
    }
}

 

作業:

搖獎程式,繼續暫停7位隨機數

訊號量/條件量/訊號?

目的:選擇哪種技術實現?

  1. 無法使用互斥與讀寫鎖實現.
  2. 訊號實現不穩定.
  3. 沒有互斥建議不考慮條件量.
  4. 最佳選擇訊號燈.

 

 

 

 

二、執行緒的讀寫鎖(自學)

         pthread_rwlock_t;

 

         pthread_rwlock_init;

         pthread_rwlock_destroy;

 

         pthread_rwlock_rdlock;

         pthread_rwlock_wrlock;

         pthread_rwlock_unlock;

 

         讀讀相容

         寫寫互斥

         讀寫互斥

 

         作用主要是為IO(檔案)操作設計.

 

三、 執行緒私有資料(瞭解)

         pthread_key_create

         pthread_key_delete

相關文章