【发布时间】:2018-04-20 21:42:48
【问题描述】:
假设我有一个内存缓冲区,不同的线程想要读取它(所以没有改变它)我需要一个锁来保护它不被并发读取吗?
我知道写,我们应该确保只有一个线程可以写,但是读的情况如何?
为了澄清,缓冲区是一个表,多个线程可以读取并使用它,但它是一个常量表,在程序启动时和任何线程启动之前从磁盘读取。
所以事情就这样发生了:
- 程序开始
- 程序从磁盘读取表值。
- 程序创建线程并将数据传递给它们。
- 不同的线程通过读取这个表和其他一些数据来处理数据并生成一些数据,但是没有线程改变这个表。
- 程序结束。
【问题讨论】:
-
必须有东西写入该缓冲区,否则它不会包含任何内容。值得一读。
-
如果内存缓冲区在线程创建之前已被完全写入,则不需要锁/内存屏障。
-
如果你知道有(而且永远不会有)任何作家——那就是;数据是静态的。那么不,你不需要任何锁。但是如果数据可能会改变,那么你确实需要锁。
标签: c++ multithreading locking