gpt4 book ai didi

c - Del. and r/w linked List Nodes in Multithreading with RW-locks -> 死锁?

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:48 24 4
gpt4 key购买 nike

我有一个问题,关于多线程中的读写锁究竟如何与单链表一起工作。

首先是 Picure 中的场景:

    Head ==> A ==> B ==> C ==> Tail
^
| |
| ----------> Thread 2:
Thread 1: - rw-access B
-deleting B

现在在文本中;线程 1 正在删除节点 B,因此锁定 A 并在完成对 B 的锁定后锁定 B,线程 2 正在尝试从 B 读取或/和写入信息,因此他试图锁定 B 并且讨厌等等,因为线程 1 已经锁定了 B。

现在我有点迷茫
线程 1 删除 B 并解锁 B 后会发生什么?
线程 1 是否处于死锁状态,因为我使用 free(b) 删除了 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;

我希望我能够说明我的问题;)

亲切的问候

最佳答案

如果你想插入/删除列表节点,那么在不锁定整个列表的情况下进行细粒度同步有点棘手。最好的开始方式是浏览 Maurice Herlihy 和 Nir ​​Shavit 的幻灯片:“Linked Lists: Locking, Lock-Free, and Beyond ...”。

我也强烈推荐同一作者的经典著作《多处理器编程的艺术》,如果你对多线程有浓厚的兴趣,这是必读的书。

关于c - Del. and r/w linked List Nodes in Multithreading with RW-locks -> 死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42810997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com