我在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