我想问你一个关于应该选择哪种并发设施(CMutex,CSemaphore,CEvent)的问题,以便使C++/MFC应用程序成为多线程。我应该选择哪种同步方案来避免实时C++/MFC应用程序出现死锁?
这是一个真正的时间,机器视觉应用程序,现在需要同时执行,它需要重构,从它的前一个单线程的地位。
我的工作流程的单个迭代如下。我有2个生产者A,B(MFC工人)需要填充两个独立的数据结构(每个1)。第三个线程,消费者(MFC工作者)也被阻止,直到两个数据都可以从A和B获得。然后,生产者A和B必须阻塞(每个数据完成时),C必须唤醒,执行计算,取消阻止A和B继续并再次阻止,等待下一个分段。
- 我不能使用队列(演员类) - 阻塞是一个要求 :(
- 我试图CEvent的和它的作品AutoResetEvents为A,B,以解除对C,然后一个 调用的CMultiLock。一个ManualResetEvent-> Set()从C到 取消阻止A和B等待后一个事件。我担心的是什么时候重置这个事件(例如A错过整个Set然后Reset)
- Do信号量与多个2可能代表更好的解决方案?
此致敬礼。
使用条件变量API将程序限制为仅在Windows Vista(Server 2008)或更高版本上运行 – bdonlan
我将继续处理该问题。我不会做过早的优化;我将首先使用第二对CEvents进行工作。然后我会弄清楚,从用户到内核空间的切换花费多少时间。 关于你的替代点。我真的需要为每个使用的同步对象使用MFC包装器吗?我没有太多的MFC并发应用程序的经验。 –
另一件与我有关的事情是C工作者的取消,你如何安全地逃脱锁定,没有类似MsgWaitForMultipleObjects的可警告等待模式? –