【发布时间】:2019-03-27 14:11:42
【问题描述】:
我创建了一个类,它有很多公共函数,一些写数据,一些只读数据。
要求我在 3 个线程内执行此操作,我没有其他选择。
我知道如果我访问共享资源只是为了读取,那么我不必保护,但我不知道我使用函数读取共享资源的私有变量时是否有什么不同.
例如我正在努力...
globalObject.readColour();
这是一个读取全局对象颜色的函数。
这是否意味着我必须在这一点上保护线程,还是可以只读取值而没有任何风险?
我正在开发支持 c 和 c++98 的 mbed。
【问题讨论】:
-
如果你只是在阅读,你没问题。您只需要确保在另一个线程尝试写入时您不会尝试读取。这通常被称为读/写锁。这个想法是你可以让尽可能多的线程同时读取,但是一旦一个线程需要写入,你必须在写入之前停止所有读取。 std::shared_mutex 可能很有用。