【发布时间】:2015-04-28 15:07:48
【问题描述】:
我在 Win32 设备中有一个 C++ 程序。代码有函数 X,它应该阻止对 X 的其他调用。这很简单,我可以使用互斥体来做到这一点。
然而,函数 X 创建并启动一个线程 Y,它将在 X 完成后监视事物。我需要确保 X 不能再次运行,直到 Y 确信一切都已正确完成。
据我了解,只能在同一个线程上获取和释放互斥锁。我想做的是将互斥锁的“锁定性”从 X 移交给 Y。
如果根据实际发生的情况更容易地描述这一点,X 用于打印某些内容,Y 用于检查打印作业是否在没有用完纸张的情况下完成。一旦 Y 对作业已经完成并且纸张没有用完感到满意,它就可以让 X 打印其他东西。我们希望 X 尽快完成,以便设备可以继续进行其他工作(通常不涉及打印,因此不应在打印机完成时暂停。)
那么...是否有一个标准的跨线程锁定模式可以做我想做的事?
我不能使用 boost 或任何其他第三方库,只能使用 Windows 内置操作。
【问题讨论】:
-
也许是一个计时器而不是一个线程?
-
线程 Y 将一直运行直到打印作业完成,这可能包括通知用户纸张用完并等待新纸张可用,即它可能需要很长时间并且不可预测足以让计时器提供帮助。
-
线程 X 和 Y 的 Synchronization Barrier 可用于实现需求。
-
简单的解决方案:检查线程是否使用 WaitForSingleObject(hThread) 运行
-
semaphore 怎么样?
标签: c++ windows multithreading winapi