gpt4 book ai didi

c# - 与每个对象关联的临界区是如何初始化的?

转载 作者:太空狗 更新时间:2023-10-30 01:24:45 24 4
gpt4 key购买 nike

当你说

lock (obj)
...

.NET 使用 obj 中的关键部分来同步以下语句。

这个临界区是如何初始化的? (例如,它是在构造时初始化还是延迟初始化?)

最佳答案

每个对象都有一个分配给它的 4 字节内存“ block ”(syncblk),它是 SyncTableEntry 的索引。创建对象时,syncblk 被分配为 0,这可以防止任何额外的内存分配(除了这个 4 字节数)。获取锁时,此 syncblk 将设置为表中的适当条目,然后可能会导致分配。实际上,这是一个惰性初始化。

当您调用 lock(object) 时,实际上是在对象上使用 Monitor.Enter,这反过来会适本地设置条目。有关详细信息,请参阅此 MSDN article on .NET Memory Internals .

关于c# - 与每个对象关联的临界区是如何初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609117/

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