【发布时间】:2012-10-14 00:14:40
【问题描述】:
这主要是一个设计问题,但由于我使用 C++11 编程,所以我更喜欢使用 C++11 的解决方案/建议。
基本上问题是我想让我的课程易于维护,同时避免使用 过度锁定。
问题很简单:
我可以避免在private 类函数a 的开头锁定,如果它仅由public 类函数b 在开始时锁定类互斥锁。
维护地狱是,将来很难看到什么方法正在调用什么,并且有可能有人会将 b 公开,并使类线程不安全。
那么最优解是什么:
- 评论
b说它不锁定std::mutex因为它只被a调用 - 使用
recursive_mutex并锁定所有方法:似乎很浪费 - 别的东西
【问题讨论】:
-
我会说使用
recursive_mutex更安全。您应该只在已经锁定的情况下发生计数器递增/递减,因此如果您已经锁定,浪费可能不是一个大因素。评论合同可能会回来咬你,所以我个人会对此保持警惕。当然,最好的解决方案是通过重新设计来避免锁定(例如,让线程将操作入队到负责对象的线程)。
标签: c++ c++11 thread-safety mutex