c - "locks"在保护临界区的程序中是如何工作的?

标签 c locking

我目前正在研究锁,我对以下使用锁保护代码关键部分的示例感到困惑。

这是我的问题:

如果 Deposit 函数首先获取锁,这是否意味着 Remove 函数必须等待 Deposit 函数释放锁才能执行其他操作?换句话说,Remove 会卡在 lock->acquire 直到 Deposit 函数锁定->release 吗? enter image description here

最佳答案

请注意,您有多个参与者:lock,在其上调用 lock 操作,以及条件变量(名为 notEmpty notFull),等待
因为问题是关于锁的,所以回答是 - yes
remove 将进入函数或从等待状态中唤醒并尝试获取锁。
无论如何,如果 deposit 函数正在使用它(也就是说,它有一个锁,它已经获得了它),remove 函数将卡在那个锁上,直到它被释放(或者,更好的是,released)。 另请注意,当您等待 条件变量 时,锁会自动释放并在您醒来后重新获取。因此,函数不会永远持有锁,仅此而已。

关于c - "locks"在保护临界区的程序中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425453/

相关文章:

python - 锁定或解锁条件格式单元格 xlsxwriter

c# - 关于 C# 中的锁定对象

assembly - 英特尔 64 和 IA-32 |原子操作,包括获取/释放语义

c - 手动打印 char * 的单个值而不循环或递增

java - 构建opencv失败

javascript - C++逻辑表达式优化

java - 锁拆分与锁 strip 化

java - 比 while (reentrantLock.isLocked()) 等待更好的解决方案

*ptr++ 的 C 到 Perl 转换

c - 构建具有 Allegro 依赖项的 C 项目