如何安全地迭代一个互锁列表

How to safely iterate an interlocked slist?

本文关键字:一个 列表 何安全 安全 迭代      更新时间:2023-10-16

线程之间共享的数据存储在一个互锁的单链表中。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684121 (v = vs.85) . aspx

我们知道list在初始化后不会改变,但是我们希望不同的线程能够迭代并读取list的内容。是否有一种安全的方法来读取/迭代列表?

当前代码使用InterlockedFlushSList从列表中取出节点,然后对数据进行临时复制,然后将节点放回列表中。如果列表在线程之间共享,就像是等待发生的竞争条件。

不只是去一个不同的线程安全结构是有一个安全的方式来读取迭代列表?

在多线程环境中读取任何列表都是安全的,只要列表在读取时没有被修改。你甚至不需要'interlocked' list