gpt4 book ai didi

c# - 在多线程应用程序中跟踪任务号

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

我正在编写一个多线程应用程序,其中一部分代码必须是线程安全的才能跟踪任务编号。

我有这个方法:

private void IncrementTaskNumber() {
Interlocked.Increment(ref _TaskNumber);
}

_TaskNumber 在同一个类中是一个 private int。问题是,这会抛出一个“属性、索引器或动态成员访问不能作为 out 或 ref 参数传递”的异常。为了解决这个问题,我这样做:

private void IncrementTaskNumber() {
int _taskNum = _TaskNumber;
Interlocked.Increment(ref _taskNum);
_TaskNumber = _taskNum;
}

这仍然是线程安全的吗?

最佳答案

_TaskNumber is a private int in the same class.

_TaskNumber 必须是一个私有(private)字段才能工作。您可能将其作为私有(private)属性(property)。

定义为:

private int _TaskNumber;

它会起作用。

另请注意,您当前的解决方法引入了竞争条件 - 您通过使用临时变量有效地摆脱了原子增量,这首先违背了使用 Interlocked 的目的.您需要直接增加该字段。

关于c# - 在多线程应用程序中跟踪任务号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145633/

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