ManualResetEvent는 기본적으로 다른 스레드에 "계속할 신호를받을 때만 진행할 수 있습니다"라고 말하며 특정 조건이 충족 될 때까지 특정 스레드의 실행을 일시 중지하는 데 사용됩니다. 제가 궁금해하는 것은 왜 while 루프를 사용하여 우리가 원하는 것을 쉽게 얻을 수있을 때 ManualResetEvent입니까? 다음과 같은 상황을 고려ManualResetEvent 대 while 루프
public class BackgroundService {
ManualResetEvent mre;
public BackgroundService() {
mre = new ManualResetEvent(false);
}
public void Initialize() {
// Initialization
mre.Set();
}
public void Start() {
mre.WaitOne();
// The rest of execution
}
}
이
public class BackgroundService {
bool hasInitialized;
public BackgroundService() {
}
public void Initialize() {
// Initialization
hasInitialized = true;
}
public void Start() {
while (!hasInitialized)
Thread.Sleep(100);
// The rest of execution
}
}
다소 유사하다으로 ManualResetEvent는 while 루프보다 더 적합한 특정 상황이 있습니까?
'ManualResetEvent'가 더 정확합니다. 루프가 최악의 경우에 대해 99ms를 잃을 수 있습니다. – Sinatr
쓰레드는 while 루프에서 동일 할 것입니다. 다른 작업을 수행 할 수 없다는 것입니다. 다중 쓰레드를 가진 것처럼, 다음 일을 계속하기 위해 어떤 표시가 필요한 특정 영역이있을 수 있습니다. 스레드는 예를 들어, 결과를 일괄 처리하여 T1이 일괄 처리하고 신호를 발생시킨 다음 T2가 일괄 처리의 일괄 처리 삽입/처리를 수행 할 수 있습니다. 이는 단지 하나의 예일뿐입니다. 각 스레드는 무언가를하는 데 전념 할 것입니다. 단일 스레드는 성능이 좋지 않고 유지 보수성이 느려질 수 있습니다. –
while 루프와의 스레드 동기화와 같은 것을 어떻게 달성합니까? manualresetevent로 간단하고 간단합니다. 당신은 또한 내가 생각하는 디자인 관점에서 당신의 필요에 맞는 것을 고려해야합니다. – Sameer