執行緒與訊號量

2021-07-26 15:31:51 字數 1878 閱讀 2812

/*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訊號量函式都有乙個下劃線。下面列出了它們提供的...