訊號量可以同時訪問多份資源。
#include
intsem_init
(sem_t* sem,
int pshared,
unsigned
int value)
;int
sem_destroy
(sem_t* sem)
;int
sem_post
(sem_t* sem)
;int
sem_wait
(sem_t* sem)
;int
sem_trywait
(sem_t* sem)
;int
sem_timedwait
(sem_t* sem,
const
struct timespec* abs_timeout)
;
sem是建立訊號量物件位址 , pshared代表是否可以與fork出的子程序共享資源(0代表不可共享 , 1代表可共享),value代表初始狀態下的資源數。
銷毀訊號量。
訊號量的資源計數遞增1。當時用sem_wait函式的話就會被喚醒。
不斷去嘗試喚醒,如果失敗,就會發回eagain錯誤碼。
sem_timedwait 在引數 abs_timeout設定的時間內等待訊號量物件的資源計數大於0,否則超時返回,返回值為 ﹣1,錯誤碼 etimedout。當使用 sem_timedwait 時,引數 abs_timeout 不能設定為 null,否則程式會在執行時呼叫 sem_timedwait 產生崩潰。
struct timespec
;
#include
#include
#include
#include
pthread_mutex_t mymutex;
sem_t mysemaphore;
int global =0;
int global_c =0;
void
*consumer_thread
(void
*para)
return
null;}
void
*producer_pthread
(void
*para)
return
null;}
intmain
(int argc,
const
char
*ar**)
pthread_t producer_pthreadid;
pthread_create
(&producer_pthreadid ,
null
, producer_pthread ,
null);
pthread_join
(producer_pthreadid ,
null);
for(i =
0; i <
5; i++
)sem_destroy
(&mysemaphore)
;pthread_mutex_destroy
(&mymutex)
;return0;
}
linux@linux:/mnt/hgfs/ubuntushare/pthread$ ./a.out
*****producer_pthread*****
producer_pthread :global = 1
-------- consumer_threadid-1076573684-------
consumer__pthread :global_c = 1
-------- consumer_threadid-1076573688-------
consumer__pthread :global_c = 2
-------- consumer_threadid-1076573692-------
consumer__pthread :global_c = 3
-------- consumer_threadid-1076573696-------
consumer__pthread :global_c = 4
-------- consumer_threadid-1076573700-------
consumer__pthread :global_c = 5
sleep(5)
producer_pthread :global = 2
sleep(1)
consumer__pthread :global_c = 6
sleep(1)
consumer__pthread :global_c = 7
sleep(1)
consumer__pthread :global_c = 8
sleep(1)
consumer__pthread :global_c = 9
sleep(1)
consumer__pthread :global_c = 10
^c
Linux 執行緒同步之訊號量同步
linux中兩種基本的同步方法是訊號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。下面介紹用訊號量進行同步。訊號量概念由荷蘭科學家dijkstra首先提出。訊號量是乙個特殊型別的變數,它可以被增加或者減少。但對其的關鍵訪問被保證是原子操作,即使在乙個多執行緒程式中也是如此。訊號量有兩...
Linux 執行緒同步之訊號量同步
linux中兩種基本的同步方法是訊號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。下面介紹用訊號量進行同步。訊號量概念由荷蘭科學家dijkstra首先提出。訊號量是乙個特殊型別的變數,它可以被增加或者減少。但對其的關鍵訪問被保證是原子操作,即使在乙個多執行緒程式中也是如此。訊號量有兩...
執行緒同步之訊號量同步
linux中兩種基本的同步方法是訊號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。現在有個圖書館,其能容納100人,現在有兩個執行緒a b,a執行緒執行 往圖書管理進入乙個人,b執行緒 從圖書館出來乙個人。那麼為了使得執行緒a在圖書館滿人的時候進入等待,而不是繼續往圖書館裡進人,使得...