C “怎么做?”;锁;在保护关键部位的项目中工作?

C “怎么做?”;锁;在保护关键部位的项目中工作?,c,locking,C,Locking,我目前正在研究锁,我对下面使用锁保护代码关键部分的示例感到困惑 我的问题是: 如果存款功能首先获得锁,这是否意味着移除功能必须等待存款功能释放锁,然后才能执行其他操作?换言之,移除将卡在锁定->获取,直到存款功能锁定->释放? 请注意,您有多个参与者:lock,在其上调用lock操作,以及condition变量(名为notEmpty和notFull),在其上等待操作 因为问题是关于锁的,所以回答是-是。 remove将进入该功能或从等待状态中唤醒并尝试获取锁。 无论如何,如果deposit函数正

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

我的问题是:

如果存款功能首先获得锁,这是否意味着移除功能必须等待存款功能释放锁,然后才能执行其他操作?换言之,移除将卡在锁定->获取,直到存款功能锁定->释放?

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

如果Remove必须等待锁释放,那么如果在Deposit函数中,我们被困在while循环count==n中,它将如何达到“count--”呢?因为当您对条件变量执行
等待
时,一旦你醒来,锁会自动释放并重新获得。所以,
存款
功能没有锁,仅此而已。天哪!我没有意识到!因此,基本上,一旦我们等待存款中的条件变量,移除函数将有机会获得锁。非常感谢!我真的很想知道锁进程是如何工作的。在等待过程中锁也会被释放(例如,在
未满的情况下。等待(&lock)
notEmpty.wait(&lock)
),让另一个线程有机会抓取锁。我不知道是这样的情况,我无法在网上找到任何相关信息,是否有一些关键字我可以搜索到阅读更多关于这一事件?