gpt4 book ai didi

c# - 对同一个对象的多个 WeakReferences 是否总是同步的?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:56 25 4
gpt4 key购买 nike

如果有多个WeakReference指向同一个对象,它们是否总是同时被清除,或者它们可能不同步。一个小例子来说明:

var o = new Object();
var weak1 = new WeakReference(o);
var weak2 = new WeakReference(o);

for (int i = 0; i < 10000; i++) {
GC.Collect();
Debug.Assert(weak1.IsAlive == weak2.IsAlive);
}

P.S. 上面的片段运行良好(未触发断言)。此外,问题实际上(至少)是两个独立的问题:

  • 它们是否大约同时被清除(不是线程安全的)?
  • 它们是否以线程安全的方式清除?

最佳答案

在您的问题中,weak1.IsAlive 始终等于 weak2.IsAlive,因为 WeakReference.IsAlive获取当前 WeakReference 对象(或者说 WeakRefernce.Target)引用的对象是否已被垃圾回收的指示。这两个 WeakReference 具有相同的目标对象。但要注意 weak1/weak2 本身也是引用类型,它们不是引用相等的,但它们的目标是相同的。

关于c# - 对同一个对象的多个 WeakReferences 是否总是同步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064196/

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