如何锁定通过不同线程访问的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
}
我有这个变量:
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
}