22.08.13 17:04 작성
·
307
0
안녕하세요 강사님!
다름이 아니라 밑에 분 질문중에 똑같은 질문이 있어 그걸 보고 해결하려고 햇는데 해결이 안되어 질문올립니다.
https://inflearn.com/questions/79914
제가 참고한 게시물이구요.
SetMinThreads와 SetMaxThreads 다 true로 뜨는 걸 확인했는데도 for문에서 i < 4로하면 작동하지 않고 i < 3으로해야 작동이 됩니다... 또 답글로 남겨주신분이 while문을 안써서 그럴 수 있다고 하셨는데 while문도 다 정확히 들어가있는데 작동하지 않아요. 원인을 알 수 있을까요?
+) 로그로 스레드 갯수 확인해봤는데 스레드 갯수는 정확히 5개 생성되었는데 하나가 놀고있네요.. 원인이 뭘까요 ㅠㅠ
2022. 11. 30. 18:13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ServerCore
{
class Program
{
static void MainThread(object state) // 쓰레드풀을 사용하기 위해서 매개변수로 object를 하나 받아줘야 함 (함수내에서 원하면 해당 매개변수를 캐스팅해서 사용, 꼭 사용할 필요는 없음)
{
for (int i = 0; i < 5; ++i)
{
Console.WriteLine("Hello Thread!");
}
}
// 메인직원
static void Main(string[] args)
{
// 쓰레드풀이 먹통이 되는 상황
ThreadPool.SetMinThreads(1, 1); // 첫번째 매개변수는 최소 일반 스레드풀 갯수 설정, 두번째 매개변수는 아직 몰라도 되는 부분임 (최소 인풋아웃풋(네트워크 이벤트를 기다린다거나)하는 스레드 갯수 설정)
ThreadPool.SetMaxThreads(5, 5); // 최대 갯수 설정하는 메소드 (5개를 누군가가 다 물고있으면 그 다음요청은 실행되지 않음)
for (int i = 0; i < 4; ++i)
{
ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); // obj를 받아서 무한루프해주세요
}
// 쓰레드풀에게 단기일감 주기 (일감을 받고 대기상태)
ThreadPool.QueueUserWorkItem(MainThread);
while (true)
{
}
}
}
}