gpt4 book ai didi

.net - 两个被同一个对象锁定的 SyncLocked 代码块可以同时执行吗?

转载 作者:行者123 更新时间:2023-12-03 13:17:48 26 4
gpt4 key购买 nike

我只是想确保我正确理解 SyncLock。鉴于以下代码,是否可以肯定地说这些 block 中的任何一个都不会同时执行?或者可以肯定地说在执行任何这些 block 期间不会执行其他代码?我无法理解 SyncLock 究竟做了什么以及为什么它需要一个随机对象来锁定?

Dim PADLOCK As Object = New Object()

A座:
SyncLock PADLOCK
'...Code
End SyncLock

B座:
SyncLock PADLOCK
'...Code
End SyncLock

C block :
SyncLock PADLOCK
'...Code
End SyncLock

最佳答案

不是完全。

首先,锁是可重入的,所以如果一个方法调用另一个方法(或递归调用同一个方法),你可以同时使用两个 由同一线程 .

其次,如果“...代码”包含 Monitor.Wait - 放弃锁定;在这种情况下,您可以在方法中有两个线程,但是 只有一个线程处于事件状态 . Wait调用阻塞,直到等待线程可以重新获得锁 - 所以它仍然是最多一个线程“拥有”锁的情况。

关于.net - 两个被同一个对象锁定的 SyncLocked 代码块可以同时执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12628311/

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