歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下多任務間通信和同步-POSIX信號量

Linux下多任務間通信和同步-POSIX信號量

日期:2017/3/1 9:50:21   编辑:Linux編程

POSIX信號量是另一種信號量的實現.它的定義和功能有System V信號量基本一樣,不同的是這組信號量函數的名字已“sem_”開頭.基本的系統該調用有四個:sem_init(),sem_wait(),sem_post()和sem_destory().

系統調用sem_init()

該系統該調用的作用是對由sem指定的信號量進行初始化.其原型:

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared , unsigned value);

參數sem:指向一個用於同步的信號量結構,該結構通常為一個長整形的數;

參數pshared:表示信號量的類型,由於目前linux值支持進程內的信號量,該值只能取0;

參數value:表示信號量的初始化值.

系統調用sem_wait()

該函數阻塞當前線程直到信號量sem的值大於0,也就是說,如果對一個值為2的信號量調用sem_wait()線程將會繼續執行,但信號量的值將減到1.其原型:

#include <semaphore.h>
int sem_wati(sem_t *sem);

如果對一個值為0的信號量調用sem_wait(),這個函數就會等待直到有其他線程增加了這個值使它不再是0為止.如果有兩個線程都在sem_wait()中等待同一個信號量變成非0值,那麼當它被第三個線程增加一個“1”時,等待線程中只有一個能夠對信號量做減法並繼續執行,另外一個還將處於等待狀態.若調用成功則返回0,否則返回-1.參數sem指向一個用於同步的信號量結構.

系統調用sem_post()

該函數用來增加信號量的值,其原型為:

#include <semaphore.h>
int sem_post(sem_t *sem);

當有線程阻塞在這個信號量上時,調用這個函數會使其中的一個線程不再阻塞.具體說來,sem_post()函數的作用是給信號量的加一個“1”,它是一個原子操作,即同時對同一個信號量做加“1”操作的兩個線程是不會沖突的,信號量的值會正確地加上一個“2”.若調用成功則返回0,否則返回-1.參數sem指向一個用於同步的信號量結構.

系統調用sem_destory()函數

該函數用來釋放信號量sem.其原型:

#include <semaphore.h>
int sem_destory(sem_t *sem);

若調用成功則返回0,否則返回-1.參數sem指向一個用於同步的信號量結構.

 

Copyright © Linux教程網 All Rights Reserved