執行緒中的訊號量和程序中的訊號量的作用相同,都是用於同步操作,達到無衝突的訪問共享資源的目的。但是它們也是有一定的區別的。
執行緒中的訊號量通過引數的不同,也可以在程序間使用。
和semget() 函式建立的訊號量不同,執行緒中的訊號量可以使兩個執行緒進行同步。
我們先看一下執行緒中訊號量的api及其引數:
#include
1.定義訊號量 sem_t sem
2.初始化訊號量 sem_init(sem_t *sem,
int shared, //0表示程序內多執行緒使用
int val)//訊號量初值
3.pv: int sem_wait(sem_t *sem) //sem--;如果小於0,阻塞
int sem_post(sem_t *sem) //sem++
4.銷毀:int sem_destroy(sem_t *sem);
例子:通過兩個執行緒分別列印12,執行緒1列印1,執行緒2列印2
**如下:
#include
.h>
#include
.h>
#include
.h>
#include
.h>
#include
.h>
#include
.h>
pthread_mutex_t mutex;
sem_t sem_full;
sem_t sem_empty;
void *rout1(void *arg)
return null;
}void *rout2(void *arg)
}int main()
執行結果:
訊號量為1,即乙個螢幕。通過訊號量,同步完成列印12數字。
posix訊號量和 systemv訊號量,不同的就是:posix訊號量可以進行同步操作。相比較一下,posix訊號量更容易使用。
執行緒 訊號量
訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...
Linux 執行緒同步 訊號量
linux 執行緒同步訊號量 訊號量用於多執行緒多工同步,乙個執行緒完成了某乙個動作後就通過訊號量告訴其他執行緒再進行某些動作,其他執行緒在等待某乙個執行緒時會阻塞。init sem t sem sem init sem,0,0 函式原型如下 int sem init sem t sem,intps...
Linux執行緒 執行緒同步互斥 訊號量
從概念上來說,訊號量是乙個非負整數計數。訊號量通常用來協調對資源的訪問,其 中訊號計數會初始化為可用資源的數目。然後,執行緒在資源增加時會增加計數,在刪 除資源時會減小計數,這些操作都以原子方式執行。如果訊號計數變為零,則表明已無可用資源。計數為零時,嘗試減小訊號的執行緒會被 阻塞,直到計數大於零為...