2

私は一般的にマルチスレッドにかなり慣れていないので、他のスレッドによって読み取り/更新されている間、共有整数変数を他のスレッドからアクセスされないようにロックする方法を知りたいです。

do do を実行しようとすると、次のエラー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

MySub は、クラスの複数のインスタンスによって呼び出され、複数のスレッドで実行されます

4

1 に答える 1

9

何が何をするのか完全には理解していないのではないかと思いますSyncLock。たとえそれができたとしても(Integerたとえば、参照型の場合)、やりたくないmyIntegerでしょう。

他の何かをロックする必要がありますObject(個人的には、通常、ロックのためだけに、通常は type の別の読み取り専用変数を宣言します)、またはいつでも操作したいだけmyIntegerの場合(必要な複合操作ではなく)同時に複数の変数を読み取りまたは更新する場合)、Interlockedクラスを使用します。

于 2012-05-28T18:14:20.807 に答える