【发布时间】:2020-07-11 16:38:42
【问题描述】:
我知道我可以使用 RwLock 来等待读取线程完成读取,尽管我想知道是否可以在读者以非原子方式阅读时写入数据(我并不关心读者是否获得旧副本数据或新数据,只要内存得到更新) 这在安全(或不安全的锈蚀)中是否可行?
关于我的具体问题的更多信息:我有一个可能需要很长时间才能写入的对象,但我希望让读者不断地阅读它。
编辑:更具体地说,我有一个包含不同对象的缓存。这些对象只保存一个字节 (u8) 数组。这个字节数组需要从不同的线程读取和写入(写入会解析一个大而繁琐的结构并将各种字段转换为字节数组)。
【问题讨论】:
-
如果写入对象需要“很长时间”,您将如何防止读者获得部分更新的副本?
-
在我的代码中,读者是否得到一个部分更新的对象并不重要,读者只需要对象的一些状态,而不是最新的状态。该对象也是静态大小的,并且不指向任何外部存储器,因此不会因每次运行 write 函数时写入的数据不同而产生任何冲突。
-
你确定在这些长写的中间状态总是一致吗?也许您可以提供更多关于您正在做什么的详细信息。
-
我确定它是一致的,在上面添加了更多细节^^^
标签: multithreading rust race-condition