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

Locking nodes when deleting from threaded linked list

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

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

换句话说,你不能用head->lock来保护head,因为lock节点里面,而且指针 head 本身不是。例如,您可以在 head 旁边声明一个名为 head_lock.

的锁

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

是否应该只依靠单个 head_lock 来保护整个列表,或者 有单独的每个节点锁取决于你如何使用列出节点和访问列表的争用量。