gpt4 book ai didi

c# - 锁对象内的垃圾收集

转载 作者:行者123 更新时间:2023-11-30 17:20:52 25 4
gpt4 key购买 nike

抛开人们对垃圾收集的看法,以下是否存在任何僵局问题:

private static readonly object lockObj = new object();
lock(lockObj )
{
///Load objects into a cache List<object> from DB call
GC.Collect(2);
GC.WaitForPendingFinalizers();
GC.Collect(2);
}

最佳答案

主要编辑,所以评论可能看起来不合适。带来不便敬请谅解。

很难确定。

假设代码看起来像这样

public class SomeType {
private static readonly object Lock = new object();

public void Foo() {
lock (Lock) {
Console.WriteLine("in foo");
GC.Collect(2);
GC.WaitForPendingFinalizers();
GC.Collect(2);
}
}

~SomeType() {
lock (Lock) {
Console.WriteLine("in finalizer");
}
}
}

如果您有更多 SomeType 实例,您可能会遇到死锁,因为它们都共享一个用于锁定的静态对象。您需要至少有一个 SomeType 的 unrooted 和 uncollected 实例,并在另一个实例上调用 Foo

现在,如果您没有上述的终结器,我看不出代码会如何死锁。

关于c# - 锁对象内的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3922457/

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