调为0时不起作用。3点时可以通话。(我在想Java)。
我再添加一些。许多人认为锁是(二进制)信号量(即-N =
1,因此信号量的值为0(保持)或1(不保持))。但这不是很正确。锁具有“所有权”的概念,因此它可能是“可重入的”。这意味着持有一个锁的线程被允许再次调用lock()(有效地将计数从0移到-1),因为该线程已经持有该锁并被允许“重新输入”。锁也可以是不可重入的。锁持有者应调用与lock()相同次数的unlock()。
信号量没有所有权的概念,因此尽管可以获取尽可能多的许可,但它们不能重入。这意味着线程在遇到值0时需要阻塞,直到有人增加信号量为止。
另外,在我所看到的(Java)中,您可以将信号量增加到大于N,这也与所有权有关:信号量没有所有权概念,因此任何人都可以给它更多许可。与线程不同,在线程中,只要线程在不持有锁的情况下调用unlock(),那都是错误。(在Java中,它将引发异常)。
希望这种思考方式有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)