【发布时间】:2026-01-21 11:45:01
【问题描述】:
我有一个问题,关于在多线程中使用单链表时 rw-locks 究竟是如何实现的。
首先是 Pitcure 中的场景:
Head ==> A ==> B ==> C ==> Tail
^
| |
| ----------> Thread 2:
Thread 1: - rw-access B
-deleting B
现在是文本;线程 1 正在删除节点 B,因此在锁定到 B 后锁定 A 并锁定 B,线程 2 正在尝试向/从 B 读取或/和写入信息,因此他试图锁定 B 并且讨厌等等,因为线程 1 已经锁定了 B。
现在我有点困惑
线程 1 删除 B 并解锁 B 后会发生什么?
线程 1 是否处于死锁状态,因为我删除了 Lock在 B 中使用 free(b) 吗?
我必须在线程 1 中销毁 B 的锁吗?
我是否必须在例行公事?比如:获得锁后检查 B 是否仍然是节点?
这里用另一张“图”来说明。
Thread 1 Thread 2
---------------------- ----------------------
Lock A
Lock B
A->next = C; Lock B
Unlock A waiting ...
free(B) waiting ...
Unlock B waiting ...
Get Lock B
Try to read/write B // what happens now?
我的列表元素如下所示
typedef struct Node
{
char Name[21]; // Information Dummy
pthread_rwlock_t aLock; // rw lock
Node *next; // pointer to the next node
}Node;
我希望我能够说明我的问题;)
亲切的问候
【问题讨论】:
标签: c multithreading linked-list thread-safety pthreads