iT邦幫忙

0

c++ 共用佇列

c++
  • 分享至 

  • xImage

我想實做thread的共用佇列用來給multithreading的程式交換資料,於是上網查了一下,決定參考以下網址的做法https://www.educba.com/c-thread-safe-queue/
其中有一段是 if (currSize == 1u) cvPop.notify_one();用來喚醒其他被wait()阻塞的thread,
但if的條件看不太懂為什麼是等於1 unsigned int就執行notify_one()
想請問有人知道這是什麼意思嗎??
另外想請問為什麼currSize每多增加一個元素是加1,而不是加資料結構的實際大小

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
DanSnow
iT邦好手 1 級 ‧ 2021-12-25 18:11:22
最佳解答
  1. 在 size 為 1 是用 notify_one 通知是因為 pop 的實作中會在 queue 為空時用 wait block 住自己,所以當 queue 裡至少有一個元素時應該要喚醒一個被 wait block 住的 pop
  2. currSize 看來是在紀錄目前 queue 中有幾筆資料,因此是 +1 -1

我要發表回答

立即登入回答