posix 執行緒(2)訊號量同步

2021-06-05 23:47:53 字數 1244 閱讀 4024

#includeint sem_init(sem_t *sem , int pshared , unsigned int value);
這個函式初始化有sem指向的訊號量物件,設定它的共享選項,並給它乙個初始化的整數值。pshared引數控制訊號量的型別,如果其值為 0,

就表示這個訊號量是當前程序的區域性訊號量。否則這個訊號量就可以在多個執行緒之間共享。

#includeint sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

這兩個函式都以乙個指標為引數,該指標指向的物件是由sem_init呼叫初始化的訊號量。

sem_post函式的作用是以原子操作的方式給訊號量的值加1.

sem_post函式的作用是以原子操作的方式給訊號量的值減1.

#includeint sem_destroy(sem_t *sem);
這個函式的作用是用完訊號量後對它進行清理。

#include #include #include #include #include #include void *thread_function(void *arg);

sem_t bin_sem;

#define work_size 1024

char work_area[work_size];

int main()

res = pthread_create(&a_thread, null, thread_function, null);

if (res != 0)

printf("input some text. enter 'end' to finish\n");

while(strncmp("end", work_area, 3) != 0)

printf("\nwaiting for thread to finish...\n");

res = pthread_join(a_thread, &thread_result);

if (res != 0)

printf("thread joined\n");

sem_destroy(&bin_sem);

exit(exit_success);

}void *thread_function(void *arg)

pthread_exit(null);

}

POSIX執行緒庫(三)執行緒同步 訊號量

為什麼需要用訊號量?在posix執行緒庫 二 執行緒同步輪詢技術 一種笨笨方法 簡單的變數 延遲的方法是一種非常不聰明的方法,主要原因是普通變數不能保證原子性,同時對標誌的操作可能導致預料外的效果。荷蘭科學家dijkstra提出訊號量的概念,它是一種特殊的變數,可以被遞增遞減,當兩個或以上執行緒對這...

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...

執行緒同步 訊號量

執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!依賴的標頭檔案 include 函式宣告 sem t 表示訊號量 int sem init sem t sem,int pshared,unsigned int value 名稱 sem init 功能 initialize an unname...