본문 바로가기

C#

c# 제한된 스레드 수만 접근 가능한 세마포어

==코드==

Semaphore(int initial threads, int maximun threads)이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            var c = new MyClass();
            for (int i=1; i<=10; i++)
            {
                new Thread(c.Run).Start(i);
            }
            Console.ReadLine();
        }
    }
 
    class MyClass
    {
        private Semaphore sema;
 
        public MyClass()
        {
            sema = new Semaphore(55);
        }
        public void Run(object seq)
        {
            Console.WriteLine(seq);
            sema.WaitOne();
            Console.WriteLine("Running#" + seq);
            Thread.Sleep(500);
            // semaphore 1개를 릴리즈함
            // 다음 스레드가 진입 가능하게 함
            sema.Release();
        }
    }
 
}
 
cs