導航:首頁 > 網路營銷 > seminit用法

seminit用法

發布時間:2021-02-21 17:03:33

1、linux信號量的問題

sem_init:初始化信號量sem_t,初始化的時候可以指定信號量的初始值,以及是否可以在多進程間共享。
sem_wait:一直阻塞等待直到信號量>0。
sem_timedwait:阻塞等待若干時間直到信號量>0。
sem_post:使信號量加1。
sem_destroy:釋放信號量。和sem_init對應。 答案補充 關於各函數的具體參數請用man查看,如man sem_init可查看該函數的幫助

2、弱弱滴問一下 linux應用程序里的讀寫read/write(fd,buf,sizeof buf),該read會不會被中斷或者掛起?

read會不會抄被中斷或者掛起?襲
會,這可要看底層驅動的實現

如果要加臨界區,應該用什麼函數?
用信號量,
sem_init():初始化
sem_wait():臨界區前調用
臨界區
sem_post();臨界區後調用

其實用法大體上和加鎖沒有多大的區別

3、sem_t的使用步驟

<

4、sem_t的初始化信號量

它的原型為: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));
頭文件為: #include <semaphore.h>
sem為指向信號量結構的一個指針;
pshared不為0時此信號量在進程間共享,否則只能為當前進程的所有線程共享;
value給出了信號量的初始值。
函數sem_post( sem_t *sem )用來增加信號量的值當有線程阻塞在這個信號量上時,調用這個函數會使其中的一個線程不再阻塞,選擇機制同樣是由線程的調度策略決定的。
函數sem_wait( sem_t *sem )被用來阻塞當前線程直到信號量sem的值大於0,解除阻塞後將sem的值減一,表明公共資源經使用後減少。
函數sem_trywait ( sem_t *sem )是函數sem_wait()的非阻塞版本,它直接將信號量sem的值減一。
函數sem_destroy(sem_t *sem)用來釋放信號量sem。

與seminit用法相關的知識