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

时间:2015-10-15 01:27:07

标签: linked-list thread-safety locking pthreads mutex

我是pthreads的新手,我需要安全地删除所有线程共享的链表中的节点。我不完全了解何时锁定和解锁节点。这是我到目前为止删除头部节点的原因。我在访问之前锁定了头部(在while状态下访问它)但是什么时候解锁呢?

1 个答案:

答案 0 :(得分:1)

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

换句话说,您无法使用head->lock来保护head,因为lock 位于节点内,而指针{{} 1}}本身不是。例如,您可以在名为head的{​​{1}}旁边声明一个锁。

这也会影响添加和查找列表的代码的工作方式 - 代码在访问head指针时也需要锁定head_lock

您是否应该依靠单个head_lock来保护整个列表,或具有单个每个节点的锁定取决于您使用列表节点的方式和数量争用的目的是访问该列表。