从线程链表中删除时锁定节点



我是pthreads的新手,我需要安全地从所有线程共享的链表中删除节点。我不完全理解什么时候锁定和解锁一个节点。这是目前为止我移除头部节点的方法。我锁定头部之前,它被访问(它是在while条件访问),但我什么时候解锁它?

在删除节点时,您不能仅仅锁定节点本身:因为您将指针更改为存储在节点外部的节点,因此您需要保护该指针不受并发访问。

也就是说,不能用head->lock来保护head,因为lock在节点内,而指针head本身不是。例如,您可以在head旁边声明一个名为head_lock的锁。

这也影响你的代码如何添加和查找列表的工作-代码需要锁定head_lock,而它访问head指针。

您是否应该仅依赖单个head_lock来保护整个列表,或者具有单独的每个节点锁,这取决于您如何使用列表节点以及访问列表的争用量。

相关内容

  • 没有找到相关文章

最新更新