コレクションへのアクセスの同期に使用できるオブジェクトを取得します。
名前空間: Microsoft.SqlServer.Dts.Tasks.Exec80PackageTask
アセンブリ: Microsoft.SqlServer.Exec80PackageTask (microsoft.sqlserver.exec80packagetask.dll 内)
構文
'宣言
Public Overridable ReadOnly Property SyncRoot As Object
public virtual Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
Object^ get ();
}
/** @property */
public Object get_SyncRoot ()
public function get SyncRoot () : Object
プロパティ値
コレクションへのアクセスの同期に使用できるオブジェクトです。
解説
ICollection.IsSynchronized を実装します。DTSReadOnlyCollectionBase から派生したカスタム コレクションを作成している場合は、SyncRoot プロパティを使用して、同期されたコレクションを独自に提供することができます。同期コードでは、コレクションを直接操作するのではなく、コレクションの SyncRoot に対して操作を行います。このことにより、他のオブジェクトから派生したコレクションを正しく操作することができます。特に、オブジェクトを同時に変更している他のスレッドとの同期が適切に保たれます。
コレクションの列挙処理は、本質的にスレッドセーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがコレクションを変更する場合があるため、列挙子が例外をスローする原因になります。列挙処理中のスレッドの安全性を確保するには、列挙処理の間を通してコレクションをロックするか、または他のスレッドによって加えられた変更に起因する例外をキャッチします。詳細については、「ICollection.IsSynchronized」を参照してください。
使用例
次のコード例では、SyncRoot を使用して列挙の間 ArrayList コレクションをロックします。
using System;
using System.Collections;
ArrayList myCollection = new ArrayList();
lock( myCollection.SyncRoot )
foreach ( Object item in myCollection )
{
// Insert your code here.
}
Imports System
Imports System.Collections
Dim myCollection As ArrayList = New ArrayList()
lock(myCollection.SyncRoot)
For Each item In myCollection
' Insert your code here.
Next
スレッド セーフ
この型の public static (Microsoft Visual Basic では共有 ) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォーム
開発プラットフォーム
サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。
対象プラットフォーム
サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。
参照
関連項目
VariablesCollection Class
VariablesCollection Members
Microsoft.SqlServer.Dts.Tasks.Exec80PackageTask Namespace