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

本文关键字:线程 访问 对象 何锁定 锁定 | 更新日期: 2023-09-27 18:07:28

我有这样一个变量:

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
}