gpt4 book ai didi

c - 快速解决死锁?

转载 作者:太空狗 更新时间:2023-10-29 12:39:18 25 4
gpt4 key购买 nike

我的教科书描述死锁如下图所示:

enter image description here

其中 st 是信号量并且

void P(sem_t *s); /* Wrapper function for sem_wait */
void V(sem_t *s); /* Wrapper function for sem_post */

我能理解这是如何工作的,如果一个线程进入死锁区域,它就无法继续前进并永远卡住。教科书上说了互斥锁排序规则: 如果对于程序中的每对互斥量 (s, t),同时持有 s 和 t 的每个线程都以相同的顺序锁定它们,则该程序是无死锁的。例如,我们可以通过先锁定 s,然后锁定 t 来解决死锁每个线程。下图显示了生成的进度图: enter image description here

但我只是有一个快速修复可能会奏效,我不确定我是否正确:

我们可以在 P 和 V 操作之间添加一些简单的语句,例如单个 ;int test = 0,这将在两个禁止区域之间创建一个垂直间隙,所以线程最终可以穿过间隙,如下图所示: enter image description here

我的方法在技术上是否正确?

最佳答案

we can just add some trivial statements such as single ; or int test = 0 between P and V operations, which will create a vertical gap between two forbidden regions, so threads can eventually pass through the gap as the picture below shows

第一个“;” (您希望编译器生成的结果是什么?)或 int test = 0; 不会造成间隙,即使执行或线程是异步的,您也无法对它们进行假设执行,这就是为什么你有互斥 btw

因此,如果您需要获得多个互斥体,则必须在所有线程中以相同的顺序完成。显然,互斥量并不是产生死锁的唯一方式,所有的同步点都必须考虑在内

关于c - 快速解决死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54196726/

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