我在Win32設備中有一個C++程序。代碼具有函數X,該函數應該阻止對X的其他調用。這很簡單,我可以使用一個互斥體來實現這一點。鎖定多個線程
但是,函數X會創建並啓動一個線程Y,該線程將在X完成後監視事物。我需要確保X不能再次運行,直到Y確信一切正常完成。
據我所知,互斥鎖只能在同一個線程上獲取和釋放。我想要做的是將互斥鎖的'鎖定'從X移交給Y.
如果根據實際發生的情況更容易地描述這一點,那麼X在那裏打印一些東西,Y是否要檢查打印作業是否完成而紙張用完?一旦Y確信工作已經完成並且紙張沒有用完,那麼它可以讓X打印其他東西。我們要X到儘快完成,以便該設備可以與其他的工作吧(這通常不涉及印刷,因此不應承擔了,而在打印機完成打印。)
所以...有沒有一個標準的交叉線程鎖定模式,將做我想做的事情?
我不能使用boost或任何其他第三方庫,只能使用Windows內置操作。
也許一個計時器而不是一個線程? –
線程Y將一直運行,直到打印作業完成,並且可以包括通知用戶紙張已用完並等待新紙張可用,即可能需要很長時間並且不足以讓計時器幫助。 – ColinM
線程X和Y的[同步障礙](https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms686360.aspx#synchronization_barrier_functions)可用於實現此要求。 – IInspectable