2015-10-15 51 views
0

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

回答

1

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

换句话说,你不能使用head->lock保护head,因为lock节点,指针head本身是没有的。例如,您可以在head旁边声明一个锁,名为head_lock

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

无论你应该只依靠单一head_lock保护整个列表,或有单独的每节点锁定取决于你如何使用列表中的节点和争用的量有用于访问名单。