gpt4 book ai didi

c - 避免死锁 - 流程

转载 作者:行者123 更新时间:2023-11-30 15:52:26 30 4
gpt4 key购买 nike

我想知道如何避免该程序出现死锁

void transfer(int from, into to, double amount) {
sem_t *sem_from, *sem_to;
sem_from=get_sem(from); //function that obtains the semaphore from bank account argument
sem_to=get_sem(to);
sem_wait(sem_from);
sem_wait(sem_to);
withdraw(from, amount);
deposit(to, amount);
sem_post(sem_to);
sem_post(sem_from);
}

谢谢。

最佳答案

您可以通过始终以相同的顺序获取锁来避免死锁。

由于您的帐号是整数,因此有一个自然的顺序来锁定它们:最小(或最大)在前。 (并以相反的顺序释放。)

类似于:

if (from < to) {
sem_one = get_sem(from);
sem_two = get_sem(to);
} else if (to < from) {
sem_one = get_sem(to);
sem_two = get_sem(from);
} else {
// weird self transfer, deal with it
}
sem_wait(sem_one);
sem_wait(sem_two);
// process transaction
sem_post(sem_two);
sem_post(sem_one);

关于c - 避免死锁 - 流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424971/

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