C# 프로그래밍 기초 실습 전자책
Semaphore 클래스

Semaphore 클래스는 공유된 리소스를 지정된 수의 쓰레드들만 엑세스할 수 있게 허용하는데, 예를 들어 최대 10개의 쓰레드들이 엑세스하도록 허용하였다면, 11번째 쓰레드는 현재 사용 중인 10개의 쓰레드중 누군가가 리소스 사용을 마쳐야지만, 그 리소스를 사용할 수 있게 된다. lock, Monitor, Mutex가 한번에 한 쓰레드만을 허용하는 반면, Semaphore는 복수 개의 쓰레드가 동시에 리소스를 엑세스하는 것을 허용한다.

예제

using System;
using System.Threading;

namespace MultiThrdApp
{
    class Program
    {
        static void Main()
        {
            MyClass c = new MyClass();

            // 10개 쓰레드들 실행
            // 처음 5개만 먼저 실행되고 하나씩 해제와 함께
            // 실행될 것임.
            for (int i = 1; i <= 10; i++)
            {
                new Thread(c.Run).Start(i);
            }
        }
    }

    class MyClass
    {
        private Semaphore sema;

        public MyClass()
        {
            // 5개의 쓰레드만 허용
            sema = new Semaphore(5, 5);
        }

        public void Run(object seq)
        {
            // 쓰레드가 가진 데이타(일련번호)
            Console.WriteLine(seq);

            // 최대 5개 쓰레드만 아래 문장 실행
            sema.WaitOne();
            
            Console.WriteLine("Running#" + seq);
            Thread.Sleep(500);
            
            // Semaphore 1개 해체. 
            // 이후 다음 쓰레드 WaitOne()에서 진입 가능
            sema.Release();
            
        }
    }
}



테스드 결과


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.





Comment 의견/코멘트 쓰기
이메일
 *정확한 이메일이 아닐 경우 삭제될 수 있습니다
의견/코멘트
좌측의 3자리 문자들을 입력해 주십시오





아티클 모바일 링크
C# 스터디 소셜미디어
쉽게 배우는 파이썬 기초