gpt4 book ai didi

.net - System.Threading.Monitor.Enter()如何工作?

转载 作者:行者123 更新时间:2023-12-03 22:54:52 25 4
gpt4 key购买 nike

我有一个问题Monitor.Enter如何工作。我研究了.net framework源代码,它仅显示了这一点:

    [System.Security.SecurityCritical]  // auto-generated 
[ResourceExposure(ResourceScope.None)]
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private static extern void ReliableEnter(Object obj, ref bool lockTaken);

我想Monitor.Enter的实现取决于平台,所以我浏览了Mono的源代码,然后我放弃了:(

是的,为每个System.Object实例分配一个关键部分可以解决问题,但是,我认为实际的Monitor.Lock并不是这样写的,因为为每个System.Object创建一个关键部分将无限制地花费。 (Win32不允许进程中有数十亿个关键部分对象!)

有人知道Monitor.Enter是如何工作的吗?请回复。提前致谢。

最佳答案

看一下Mono的源代码,似乎他们在对象被首次锁定时创建了一个信号量(使用 CreateSemaphore 或类似的平台特定的函数),并将其存储在对象中。似乎还有一些信号池及其关联的MonoThreadsSync结构正在进行对象池化。

如果您有兴趣,相关功能是文件static inline gint32 mono_monitor_try_enter_internal (MonoObject *obj, guint32 ms, gboolean allow_interruption)中的mono/metadata/monitor.c

我希望Microsoft .Net可以执行类似的操作。

关于.net - System.Threading.Monitor.Enter()如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770815/

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