Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Array.IsSynchronized 속성의 역할과 사용법 완벽 정리

C#의 Array.IsSynchronized 속성은 해당 배열(Array)에 대한 접근이 스레드로부터 안전하게 동기화되어 있는지 여부를 나타내는 값을 반환합니다.

IsSynchronized 속성은 System.Collections.ICollection 인터페이스에서 요구하는 멤버이기 때문에 배열 클래스가 이를 구현하도록 되어 있습니다. 또한 배열을 사용하는 클래스는 SyncRoot 속성을 활용해 자체적인 동기화 로직을 구현할 수 있습니다.

IsSynchronized 속성의 구문

IsSynchronized 속성의 기본 구문은 다음과 같습니다. bool 타입의 읽기 전용(get) 속성입니다.

public bool IsSynchronized { get; }

배열의 경우 이 속성은 항상 false를 반환하며, 실질적인 동기화 처리는 SyncRoot 속성과 함께 lock 문을 사용하여 수행합니다. Array.IsSynchronized 속성의 구현 방식은 SyncRoot 속성과 동일한 원리로 작동합니다.

사용 예제

다음 예제는 SyncRoot 속성을 이용해 배열에 대한 접근을 잠그고(lock), foreach 루프로 배열 요소를 안전하게 출력하는 코드입니다.

using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static void Main() {
        Array arr = new int[] { 2, 1, 9, 4, 8, 6, 8 };
        lock(arr.SyncRoot) {
            foreach (Object val in arr)
            Console.WriteLine(val);
        }
    }
}

실행 결과

위 코드를 실행하면 배열에 저장된 모든 요소가 순서대로 출력됩니다.

2
1
9
4
8
6
8

정리

Array.IsSynchronized 속성은 ICollection 인터페이스 준수를 위해 존재하며, 배열 자체는 기본적으로 동기화되지 않습니다. 따라서 멀티스레드 환경에서 배열에 안전하게 접근하려면 SyncRoot 속성을 lock 문과 함께 사용하는 것이 올바른 방법입니다.