gpt4 book ai didi

c# - 为实例创建多个 syncLock 变量

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

我有两个使用延迟加载支持字段的内部属性,并用于多线程应用程序,因此我根据 this MSDN article 实现了双重检查锁定方案。

现在,首先假设这是一个合适的模式,所有的例子都展示了为一个实例创建一个锁对象。如果我的两个属性相互独立,为每个属性创建一个锁实例不是更有效吗?

我突然想到,为了避免死锁或竞争条件,也许只有一个。没有想到一个明显的情况,但我相信有人可以告诉我一个......(显然我对多线程代码不是很有经验)

private List<SomeObject1> _someProperty1;
private List<SomeObject2> _someProperty2;
private readonly _syncLockSomeProperty1 = new Object();
private readonly _syncLockSomeProperty2 = new Object();

internal List<SomeObject1> SomeProperty1
{
get
{
if (_someProperty1== null)
{
lock (_syncLockSomeProperty1)
{
if (_someProperty1 == null)
{
_someProperty1 = new List<SomeObject1>();
}
}
}
return _someProperty1;
}

set
{
_someProperty1 = value;
}
}

internal List<SomeObject2> SomeProperty2
{
get
{
if (_someProperty2 == null)
{
lock (_syncLockSomeProperty2)
{
if (_someProperty2 == null)
{
_someProperty2 = new List<SomeObject2>();
}
}
}
return _someProperty2;
}

set
{
_someProperty2 = value;
}
}

最佳答案

如果您的属性是真正独立的,那么为它们中的每一个使用独立的锁是没有坏处的。

关于c# - 为实例创建多个 syncLock 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422919/

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