Pro*_*mit 3 c++ windows linked-list lock-free
Windows提供了一个无锁的单链表,如本页所述: Win32 SList
我想知道这个功能是否存在一个好的C++包装器.当我说好的时候,我的意思是它尽可能地导出通常的STL接口,支持迭代器等.我宁愿使用别人的实现而不是坐下来编写STL类型的容器.
您将无法在SList上层叠STL样式界面.为了避免内存管理问题,列表中唯一可访问的节点是列表的头部.访问该节点的唯一方法是将其从列表中弹出.这可以防止两个线程拥有相同的节点,然后一个线程删除该节点,而另一个线程仍在使用它.这就是我所说的"内存管理问题",是无锁编程中的常见问题.您可以随时弹出第一个节点,然后按照SLIST_ENTRY结构中的"Next"指针进行操作,但这是一个非常糟糕的主意,除非您可以保证在读取节点时节点不会缩小,节点被释放.当然,这仍然会从列表中删除头节点.
基本上你是在尝试使用SList错误.对于您想要做的事情,您只需要使用STL容器并使用锁保护对它的访问.STL算法不适用于像SList一样可变的无锁数据结构.
所有这一切都说你可以创建一个围绕SList的C++包装,但它不会兼容STL.