信號量是E.W.Dijkstra提出的方法,它使用1個整型變量來累計喚醒次數,供以后使用。1個信號量的取值可以為0,或為正值。
信號量有兩種操作:
PV操作是原子操作:原子操作指1組相干聯的操作要末都不中斷地履行,要末都不履行。
如果不需要信號量的技術能力,有時可使用信號量的1個簡化版本,稱為互斥量。
互斥量是1個可以處于兩態之1的變量:解鎖和加鎖,這樣只需要用1個2進制位表示它,實際上通常使用1個整型量,0表示解鎖,其他所有值表示加鎖。
互斥量使用有兩個進程:
與互斥量相干的主要函數:
線程調用 | 描寫 |
---|---|
pthread_mutex_init | 創建1個互斥量 |
pthread_mutex_destroy | 撤消1個已存在的互斥量 |
pthread_mutex_lock | 取得1個鎖或阻塞 |
pthread_mutex_trylock | 取得1個鎖或失敗 |
pthread_mutex_unlock | 釋放1個鎖 |
除互斥量以外,pthread提供了另外一種同步機制:條件變量。互斥量在允許或阻塞對臨界區的訪問上是很有用的,條件變量則允許線程由于1些未到達的條件而阻塞。絕大部份情況下這兩種方法是1起使用的。
與條件變量相干函數
線程調用 | 描寫 |
---|---|
pthread_cond_init | 創建1個條件變量 |
pthread_cond_destroy | 撤消1個條件變量 |
pthread_cond_wait | 阻塞以等待1個信號 |
pthread_cond_signal | 向另外一個線程發信號來喚醒它 |
pthread_cond_broadcast | 向多個線程發信號來讓它們全部喚醒 |
摘自:
http://www.cnblogs.com/diyingyun/archive/2011/12/04/2275229.html
1. 互斥量用于線程的互斥,信號線用于線程的同步。
這是互斥量和信號量的根本區分,也就是互斥和同步之間的區分。
2. 互斥量值只能為0/1,信號量值可以為非負整數。
也就是說,1個互斥量只能用于1個資源的互斥訪問,它不能實現多個資源的多線程互斥問題。信號量可以實現多個同類資源的多線程互斥和同步。當信號量為單值信號量是,也能夠完成1個資源的互斥訪問。
3. 互斥量的加鎖和解鎖必須由同1線程分別對應使用,信號量可以由1個線程釋放,另外一個線程得到。
互斥:是指某1資源同時只允許1個訪問者對其進行訪問,具有唯1性和排它性。但互斥沒法限制訪問者對資源的訪問順序,即訪問是無序的。
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已實現了互斥,特別是所有寫入資源的情況一定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源