【发布时间】:2012-10-16 06:53:17
【问题描述】:
我在 VS2010 中使用 C++,我有一个带有一堆属性(getter 和 setter)的容器类(实际上是一堆具有属性的对象——但让我们简化它并假设它只是直接在容器类。
在这个容器类上有一个 Update 函数,重要的是在 Update 方法执行时阻塞 setter 方法。
该应用程序是多线程的,所以我正在考虑使用 mutex/events/critical 部分来处理这个问题。
我的问题是:如何在 Update 方法运行时锁定/阻止 setter,而不让 setter 方法相互阻止?此外,我还需要设置器来阻止 Update 方法。
换句话说,我需要一个正常的临界区机制,除了 setter 不应该互相阻塞。
提前致谢, 马丁
【问题讨论】:
-
您是否还希望保护并发 setter 免受相同属性的影响(如果没有,为什么不)?
-
所有属性都是完全独立的,因此可以安全地同时更改它们。一个正常的临界区可以解决我的问题;但是,如果二传手可以互相阻止,我担心这会给我带来很大的开销。 setter 被非常频繁地调用,并且 Update 方法被调用时之间的时间间隔最小(意味着不那么频繁)。
-
我的问题不是 setPropertyX 是否独立于 setPropertyY。这是您是否需要防范并发 setPropertyX 调用。如果这不是问题,请参阅下面的答案。 (老实说,我很困惑它怎么不成为一个问题,但你比我更了解代码)。
标签: c++ events mutex critical-section