Array.SyncRoot 속성은 Array에 대한 액세스를 동기화하는 데 사용할 수 있는 개체를 가져오는 데 사용됩니다. 배열이 있는 클래스는 SyncRoot 속성을 사용하여 자체 동기화를 구현할 수도 있습니다.
컬렉션을 통해 열거하는 것은 스레드로부터 안전한 절차가 아닙니다. 다른 스레드는 컬렉션이 동기화된 경우에도 컬렉션을 수정할 수 있습니다. 이로 인해 결국 열거자가 예외를 throw합니다. 이를 위해서는 컬렉션을 잠가야 합니다.
Array.SyncRoot 속성으로 작업하는 예를 살펴보겠습니다 -
예시
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { Array arr = new int[] { 23, 11, 32, 18, 87 }; lock(arr.SyncRoot) { foreach (Object val in arr) Console.WriteLine(val); } } }
출력
23 11 32 18 87
위에서 우리는 배열에 잠금을 설정했습니다 -
lock(arr.SyncRoot)