c# semaphoreSlim 스레드 수 제한

1133 단어
전언
우리가 라인을 사용할 때 만약에 여러 개의 라인 수가 한 자원을 방문할 때 프로그램의 운행에 매우 영향을 미친다. 만약에 쓴 작업이 있다면 자물쇠를 써야 하기 때문에 라인이 같은 곳에 막히기 때문에 우리는 한 자원에 대한 방문 수를 제한할 수 있다.
본문
static SemaphoreSlim _semaphore = new SemaphoreSlim(4);
static object x = new object();
static int y = 0;
static void Main(string[] args)
{
	for (int i = 0; i <= 100; i++)

	{
		string ThreadName = "Thread" + i;
		int secondsToWait = 2;
		var t = new Thread(() => AccessDataBase(ThreadName, secondsToWait));
		// t.IsBackground = true;
		t.Start();
	}
}

static void AccessDataBase(string name, int seconds)
{
	Console.WriteLine($"{name }waits to access a database");
	_semaphore.Wait();
	lock (x)
	{
		y++;
	}
	Console.WriteLine("            :" + y);
	Console.WriteLine($"{name} was grants an access to a database");
	Thread.Sleep(TimeSpan.FromSeconds(seconds));
	lock (x)
	{
		y--;
	}
	_semaphore.Release();

	Console.WriteLine($"{name} was completed");
}

위 코드에서, 나는 100개의 라인을 만들었지만, 실행 중인 라인 수는 줄곧 4개에 불과하다.
이렇게 하면 우리는 라인이 자원에 접근하는 빈도를 제한할 것이다. 왜 나는semaphore.Wait();안에 락을 넣었을까요?병발수는 여전히 4이기 때문이다.

좋은 웹페이지 즐겨찾기