如何锁定通过不同线程访问的int

How to lock int that accessing via different threads

我有这个变量:

private static volatile int _filesInUse;

这个变量是通过不同的线程访问的,我想在它的值发生变化时锁定它,以便更新我的 UI 当前状态。

要更改整数,您有 Interlocked.Increment。您只需使用 ref 关键字将其传递:

int result = Interlocked.Increment(ref _filesInUse);

一直使用 result(它不会在 _filesInUse 更新时更新,因此它保存在您的程序中以供使用)。

您应该提供一种方法来更改已同步的值:

[MethodImpl(MethodImplOptions.Synchronized)]
public void SomeMethod() {/* code */}

你为什么不使用 [lock][1]

object lockObject = new object();

lock(lockObject)
{
// do your value changing stuff
}