Linux關於訊號量

2021-08-28 06:16:28 字數 1627 閱讀 8795

dijkstra提出的「訊號量」概念是共發程式設計領域的一項重大進步 訊號量是一種變數,它只能取正整數值,對這些正整數只能進行兩種操作:等待和訊號 用兩種記號來表示訊號量的這兩種操作:     p(semaphore variable) 代表等待     v(semaphore variable) 代表訊號

首先我們對訊號量進行封裝:

//對訊號量中要用到的聯合體進行宣告

union semun

//錯誤列印

void error_exit(char *errorinfo)

//訊號量建立

int  sem_create(key_t key,int nsems)

return semid;

}//訊號量的開啟

int sem_myopen(key_t key)

return semid;

}//訊號量刪除

int sem_delete(int semid)

return ret;

}//訊號量設定裡面的值

int sem_setval(int semid,int nsempos,int val)

return ret;

}//訊號量獲取裡面的值

int sem_getval(int semid,int nsempos)

return value;

}//訊號量設定

int sem_setall(int semid,unsigned short*values)

return ret;

}//訊號量獲取

int sem_getall(int semid,unsigned short*values)

return ret;

}//訊號量v操作

int sem_v(int semid,int npos)

; int ret=semop(semid,&buf,1);

if (ret<0)

return ret;

}//訊號量p操作

int sem_p(int semid,int npos)

; int ret=semop(semid,&buf,1);

if (ret<0)

return ret;

}

簡單使用上面封裝的函式實現 父子程序上鎖

int main()

}//子程序

使用以上封裝的函式實現多程序p和v的操作

int main()

結果:

上面結果:fork6次,總共64個程序,如同64個人練車一樣,但是只有10輛車(set_value的第三個引數設定了10),使用p操作代表車被用了一輛,v代表車使用完讓出來給別人用,這就是生產者和消費者模型,進行資源保護

關於訊號量

1 訊號量的定義 struct semaphore 在linux中,訊號量用上述結構體表示,我們可以通過該結構體定義乙個訊號量。2 訊號量的初始化 可用void sema init struct semaphore sem,int val 直接建立,其中val為訊號量初值。也可以用兩個巨集來定義和初...

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...