我在项目中使用了MFC同步对象,没有任何问题。但最近我发现了一篇文章,其中解释了MFC synchronization is completely wrong。我不确定他正在讨论哪种版本的MFC,但我认为MFC在最近的版本中已经成熟。我正在使用随Visual Studio 2008安装一起提供的MFC库。使用此版本的MFC库是否安全,尤其是同步?
答案 0 :(得分:1)
作者的断言并不适用于所有条件,而是适用于特定条件。 Lock
返回BOOL,由于某种原因,你大多不关心它是否失败。大多数时候你会打电话来锁定或等待。在其他情况下,FALSE意味着失败。如果您需要检查超时,可以使用本机API(很少见)。
递归CSingleLock
是荒谬的。您不使用相同对象重新锁定。您可以安全地使用multipe CSinlgeLock
对象来获得递归访问。
CEvent
,CMutex
和其他命名对象类可以在整个过程中使用。我用过它了!
我不使用信号量。可能是其他一些人可以评论。
答案 1 :(得分:1)
关于互斥锁超时,有一个并行软件设计学校,说你不应该使用超时进行正常操作。然后你的设计会涉及互斥锁或其他没有超时的锁,而超时实际上是一种处理死锁的机制:你试图设计你的系统不会出现死锁,但万一它们确实发生了,你宁愿拥有它失败或多或少优雅,而不是永远保持交易。
如果以这种方式使用锁定,为什么尝试获取互斥锁失败可能并不重要。
另一方面,它看起来似乎没有从根本上打破,但至少有些不足,这些信息没有任何理由丢失,并且有更好的框架可以为互斥锁提供OO包装器,所以无论如何都避免使用MFC这个案子似乎是一个好主意。