0

通常、マルチスレッド時に共有変数にアクセスするには、次の手順を実行して同期する必要があります。

'''This is VB code. 
'Lock variable to request access and wait. 
Monitor.Enter(list1)
Try
    list1.item(i) = 42
Finally
  Monitor.Exit(Me)
End Try

しかし、特定のリストに要素を追加したいこの場合、このロックを行う必要がありiますか? このi値は 1 回しか編集されないため、インデックスが 2 回変更されることを心配する必要はありません。

また、設定したのが Array または ArrayList の場合はどうなりますか? インデックスを 2 回編集しないことが確実な場合、最も速く使用できるのはどれですか?

4

2 に答える 2

0

複数のスレッドが同じオブジェクトを変更する心配がない場合は、ロックを行う必要さえありません。配列/コレクションのサイズを変更するためだけに(この場合)、すでに存在するアイテムに対してロックを使用したことはないと思います(非常に特殊なケースを除く)。

ところで、SYNCLOCKを調べる必要があります。それらは本質的に同じです。MS は次のように述べています。「Enter および Exit メソッドによって提供される機能は、C# の lock ステートメント (Visual Basic では SyncLock) によって提供される機能と同じですが、lock および SyncLock は Exit メソッドを try…finally ブロック (Try…Finally in) でラップする点が異なります。 Visual Basic) を使用して、モニターが解放されていることを確認してください。」

于 2013-10-24T15:53:52.870 に答える