gpt4 book ai didi

c++ - 是否有围绕 Win32 的无锁 SList 的合适的 C++ 包装器?

转载 作者:可可西里 更新时间:2023-11-01 14:43:21 25 4
gpt4 key购买 nike

Windows 提供了一个无锁的单向链表,如本页所述: Win32 SList

我想知道是否有围绕此功能的现有良好 C++ 包装器。当我说好时,我的意思是它尽可能地导出通常的 STL 接口(interface),支持迭代器等。我宁愿使用别人的实现也不愿坐下来写一个 STL 类型的容器。

最佳答案

您永远无法在 SList 之上添加 STL 风格的界面。为了避免内存管理问题,列表中唯一可访问的节点是列表的头部。访问该节点的唯一方法是将其从列表中弹出。这可以防止两个线程拥有相同的节点,然后一个线程删除该节点而另一个线程仍在使用它。这就是我所说的“内存管理问题”,也是无锁编程中的常见问题。您总是可以弹出第一个节点,然后跟随 SLIST_ENTRY 结构中的“Next”指针,但这是一个非常糟糕的主意,除非您可以保证列表不会收缩,并且在您读取它时会释放节点。当然,这仍然会从列表中删除头节点。

基本上您正在尝试错误地使用 SList。对于听起来像你想做的事情,你只需要使用一个 STL 容器并使用锁来保护对它的访问。 STL 算法不适用于像 SList 这样可变的无锁数据结构。

综上所述,您可以围绕 SList 创建一个 C++ 包装器,但它与 STL 不兼容。

关于c++ - 是否有围绕 Win32 的无锁 SList 的合适的 C++ 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com