2014-01-11 22 views
0

我的問題: A,B - 信號量。如何撤銷信號量最新操作的SEM_UNDO?

過程是循環:

  1. 等待A> = 1,遞減甲
  2. 做一些計算
  3. 增量B.
  4. 回1

進球:過程終止後,我需要減少A等於B的增量。

所以我想我會在1.添加標誌SEM_UNDO,但它通過該過程解除了對A所做的每個減法。當進程達到4時如何從1撤消/撤消SEM_UNDO?

+0

如果'A'和'B'最後不匹配,則您的問題比SEM_UNDO更大。看起來你似乎誤解了信號量在事物中扮演的角色。你如何向我們展示一些代碼,我們可以幫助你弄清楚如何避免這些扭曲。 – cHao

回答

0

好吧,我在開始思考問題時是「撤消」SEM_UNDO而不是「撤銷」它。

  1. -x與SEM_UNDO
  2. + X無:

    與操作執行semop調用()後+ x其中SEM_UNDO,您可以在以後通過調用執行semop ()再次用兩個操作撤消SEM_UNDO SEM_UNDO

+4

我承認我不能跟隨你到底在做什麼,但我的猜測是你已經把自己畫到了一個角落,現在想想在牆上劃一個洞來逃出另一個房間是一個解決方案。 – Duck

+0

@Duck在我正在描述我正在嘗試做什麼的部分問題中出現了一個錯誤 - 只是糾正了它。對不起大家。 – Maq

+0

這是不正確的。確保您的流程在終止時沒有出色的撤銷操作的方式是使用* SEM_UNDO執行+和 - 操作*。 – craig65535