#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...