gpt4 book ai didi

c# - 将对象锁定在属性中,c#

转载 作者:太空狗 更新时间:2023-10-30 00:27:48 25 4
gpt4 key购买 nike

public ArrayList InputBuffer
{
get { lock (this.in_buffer) { return this.in_buffer; } }
}

在调用 InputBuffer.Clear 期间是否锁定了 this.in_buffer?

或者属性在获取对 in_buffer 对象的引用时简单地锁定它;锁退出,然后该引用用于清除?

最佳答案

不,属性在获取引用时锁定引用。老实说,这毫无意义……这更常见:

private readonly object mutex = new object();
private Foo foo = ...;

public Foo Foo
{
get
{
lock(mutex)
{
return foo;
}
}
}

该锁将覆盖属性访问本身,并且不会为使用Foo 执行的操作提供任何保护。然而,这与完全没有锁是一样的,因为只要变量只是在持有相同锁的情况下写入,它确保任何时候你读取Foo 属性,您正在访问属性的最新值...没有锁,没有内存屏障,您可能会得到“陈旧”的结果。

这很弱,但值得了解。

就我个人而言,我尝试使极少数类型成为线程安全的,而那些往往具有更合适的操作...但是如果您想编写确实从多个线程修改和读取属性的代码,这是这样做的一种方式。使用 volatile 也有帮助,但它的语义非常微妙。

关于c# - 将对象锁定在属性中,c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092769/

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