/*file1*/
//file1實現了1個訊號量,對兩個執行緒的同步.
#include
#include
#include
pthread_t pthid1,pthid2;
sem_t sem;
static
void * fun1(void *arg)
static
void * fun2(void *arg)
int main(int argc, const
char *argv)
if(0 != pthread_create(&pthid2,null,fun2,null))
pthread_join(pthid1,null);
pthread_join(pthid2,null);
return
0;}
/*file2*/
//file2 實現了2個訊號量,對兩個執行緒的同步
#include
#include
#include
#include
pthread_t pthid1,pthid2;
sem_t sem1;
sem_t sem2;
int i = 1000;
static
void * fun1(void *arg)
return null;
}static
void * fun2(void *arg)
return null;
}int main(int argc, const
char *argv)
if(0 != pthread_create(&pthid2,null,fun2,null))
pthread_join(pthid1,null);
pthread_join(pthid2,null);
return
0;}
/*file3*/
//file3 實現了乙個訊號量,對兩個執行緒的互斥
#include
#include
#include
pthread_t pthid1,pthid2;
sem_t sem;
static
void * fun1(void *arg)
static
void * fun2(void *arg)
int main(int argc, const
char *argv)
if(0 != pthread_create(&pthid2,null,fun2,null))
pthread_join(pthid1,null);
pthread_join(pthid2,null);
return
0;}
int sem_init(sem_t *sem, int pshared, unsigned
int value);
1/功能
初始化訊號量對應的資源數目
2/引數
引數1 為 訊號量指標
引數3 為 資源的數量
3/返回值
返回值 ,成功為0,失敗為-1
1/功能
搶占資源
如果引數指向的資源為0,則阻塞
如果引數指向的資源大於0,則資源減1,函式返回
1/功能
釋放資源
資源加1,返回.
注意: 資源不可能為負數.
執行緒與訊號量
訊號量的資料型別為結構sem t,它本質上是乙個長整型的數。函式sem init 用來初始化乙個訊號量。它的原型為 extern int sem init p sem t sem,int pshared,unsigned int value sem為指向訊號量結構的乙個指標 pshared不為 時此...
執行緒 訊號量
訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...
systemV訊號量 與 Posix訊號量
一 函式上的區別 訊號量有兩種實現 傳統的system v訊號量和新的posix訊號量。它們所提供的函式很容易被區分 對於所有system v訊號量函式,在它們的名字裡面沒有下劃線。例如,應該是semget 而不是sem get 然而,所有的的posix訊號量函式都有乙個下劃線。下面列出了它們提供的...