如何SyncLock共享整数

Max*_*eat 2 .net vb.net multithreading thread-safety synclock

我对一般的多线程很新,我想知道如何锁定共享整数变量,以便其他线程在被其他线程读取/更新时不被其他线程访问.

当我尝试这样做时SyncLock myInteger,我得到了错误:错误6'SyncLock'操作数不能是'Integer'类型,因为'Integer'不是引用类型.

这是我的意思的简化示例

Private Shared myInteger As Integer

Private Sub MySub()
  SyncLock myInteger ' This does not work
    ' read/write a new value to myInteger
  End SyncLock
End Sub
Run Code Online (Sandbox Code Playgroud)

MySub由该类的多个实例调用,并在多个线程中运行

Jon*_*eet 9

我怀疑你不完全明白是什么SyncLock.即使您可以这样做(Integer例如,如果是引用类型),您也不希望这样做 - 因为当您替换值时myInteger,锁将无用.

您应该要么在别的锁(我个人一般宣布独立,只读变量纯粹是为了锁定,一般类型的缘故Object),或者如果你只是想操作上myInteger在任何时候(而不是一个需要一些复合操作同时读取或更新多个变量),使用Interlocked该类.