訊號量從本質上是乙個非負整數計數器,是共享資源的數目,通常被用來控制對共享資源的訪問。
訊號量可以實現執行緒的同步和互斥
通過sem_post()和wem_wait()函式對訊號量進行加減操作從而解決執行緒的同步和互斥。
sem_t
#include int sem_init(sem_t *sem,int pshared,unsigned value);
int sem_destroy(sem_t *sem)
返回值:成功返回0,失敗返回錯誤編號
引數: sem:訊號量指標
pshared:是否在程序間共享的標誌,0為不共享,1為共享
value:訊號量的初始值
#include int sem_post(sem_t *sem);//增加訊號量的值
int sem_wait(sem_t *sem);//減少訊號量的值
int sem_trywait(sem_t *sem);//sem_wait()的非阻塞版本
返回值:成功返回0,出錯返回錯誤編號
呼叫sem_post()一次訊號量加1操作
呼叫sem_wait()一次訊號量減1操作
當執行緒呼叫sem_wait()後,若訊號量的值小於0則執行緒阻塞。只有其他執行緒在呼叫sem_post對訊號量作加操作後並且其值大於或者等於0時,阻塞的執行緒才能繼續執行
啟動三個子執行緒,通過執行緒訊號量控制子執行緒的執行順序 c->b->a
#include #include #include #include //定義兩個執行緒訊號量
sem_t sem1;
sem_t sem2;
void *a_fn(void *arg)
void *b_fn(void *arg)
void *c_fn(void *arg)
int main(void)
9 Linux多執行緒
linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。編寫linux下的多執行緒程式,需要使用標頭檔案pthread.h,連線時需要使用庫libpthread.a。gcc lpthread helloworld.c o helloworld include int pthread ...
Linux學習筆記 9
root localhost mount 查詢系統中已經掛載的裝置 執行效果 root localhost mount dev sda5 on type ext4 rw proc on proc type proc rw sysfs on sys type sysfs rw devpts on de...
Linux學習筆記9
1 linux檔案屬性中各個列的含義 ls lhi的結果 139170 rw r r 1 root root 22 mar 11 15 17 oldboy.txt 從左往右 139170 inode號碼,家庭住址 檔案型別 rw r r 許可權 1 硬鏈結數 root 屬主 所有者 root 屬組 ...