gpt4 book ai didi

c# - 实例构造函数设置了一个静态成员,是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 22:04:40 26 4
gpt4 key购买 nike

我正在重构一些代码,并且想知道在实例构造函数中使用 lock

public class MyClass {

private static Int32 counter = 0;
private Int32 myCount;

public MyClass() {

lock(this) {
counter++;
myCount = counter;
}
}
}

请确认

  1. 实例构造函数是线程安全的。
  2. lock 语句阻止访问该代码块,而不是静态“counter”成员。

如果原始程序员的意图是让每个实例都知道它的“计数”,我将如何同步对“计数器”成员的访问以确保另一个线程不是新的 MyClass 并在此设置计数之前更改计数?

仅供引用 - 这个类不是单例。实例必须简单地知道它们的数量。

最佳答案

如果你只是递增一个数字,那么有一个特殊的类(Interlocked)...

http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx

Interlocked.Increment Method

Increments a specified variable and stores the result, as an atomic operation.

System.Threading.Interlocked.Increment(myField);

有关线程最佳实践的更多信息...

http://msdn.microsoft.com/en-us/library/1c9txz50.aspx

关于c# - 实例构造函数设置了一个静态成员,是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41792/

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