c# semaphoreSlim 스레드 수 제한
우리가 라인을 사용할 때 만약에 여러 개의 라인 수가 한 자원을 방문할 때 프로그램의 운행에 매우 영향을 미친다. 만약에 쓴 작업이 있다면 자물쇠를 써야 하기 때문에 라인이 같은 곳에 막히기 때문에 우리는 한 자원에 대한 방문 수를 제한할 수 있다.
본문
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이기 때문이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.