如何安全地迭代互锁的slist?

时间:2015-10-16 15:19:32

标签: c++ windows multithreading

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

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

当前代码使用InterlockedFlushSList获取列表中的节点OUT,然后生成数据的临时副本,然后将节点放回到slist中。如果在线程之间共享slist,就好像等待发生的竞争条件。

如果没有去一个不同的线程安全结构是否有一种安全的方法来读取迭代slist?

1 个答案:

答案 0 :(得分:3)

读取任何列表在多线程环境中是安全的,前提是列表在读取时不会被修改。你甚至不需要联锁'列表。