C 11 實現訊號量(吃水果問題)

2022-05-03 11:03:15 字數 810 閱讀 8895

**自  

c++11中有互斥和條件變數但是並沒有訊號量,但是利用互斥和條件變數很容易就能實現訊號量。

訊號量是乙個整數 count,提供兩個原子(atom,不可分割)操作:p 操作和 v 操作,或是說 wait 和 signal 操作。

吃水果問題:桌子有乙隻盤子,只允許放乙個水果,父親專向盤子放蘋果,母親專向盤子放桔子兒子專等吃盤子的桔子,女兒專等吃盤子的蘋果。只要盤子為空,父親或母親就可以向盤子放水果,僅當盤子有自己需要的水果時,兒子和女兒可從盤子取出。請給出四個人之間的同步關係,並用pv操作實現四個人的正確活動的問題。

#include #include 

#include

#include

using

namespace

std;

class

semaphore

void p()//

相當於訊號p操作,申請乙個訊號

void v()//

相當於v操作,釋放乙個訊號

private

:

intcount;

mutex mtk;

condition_variable cv;

};//

有蘋果、橙子、盤子三種訊號

);void

father()

}void

mother()

}void

son()

}void

daughter()

}int

main()

c 11 實現訊號量

簡單來說,就是訊號量太容易出錯了 too error prone 通過組合互斥鎖 mutex 和條件變數 condition variable 可以達到相同的效果,且更加安全。實現如下 class semaphore void signal void wait count private boost...

用pv操作實現 吃水果問題(C 語言)

功能 實現吃水果問題 題目內容 桌子有乙隻盤子,只允許放乙個水果,父親專向盤子放蘋果,母親專向盤子放桔子 兒子專等吃盤子的桔子,女兒專等吃盤子的蘋果。只要盤子為空,父親或母親就可以向盤子放水果,僅當盤子有自己需要的水果時,兒子和女兒可從盤子取出。請給出四個人之間的同步關係,並用 pv操作實現四個人的...

作業系統 訊號量vs互斥鎖c 11訊號量實現

鎖是服務於共享資源的 而semaphore多用於控制多個執行緒間的執行順序的。1 兩個執行緒交替列印0,1 c 11中有 mutex 互斥量 有 condition variable 條件變數 並沒有 semaphore 訊號量 需要自己實現。版本1 自己實現的訊號量類。無非就是讓p v操作,即 減...