안녕하세요
항상 좋은 글로 많은 도움을 받고 있는데
해결이 되지 않는 문제가 있어서 질문 글을 올려봅니다.
동시에 오차 없이 함수를 시작할려고 하는데 일단 제가 테스트 및 생각한 방법은
10개 스레드 or Task를 생성하고 한개의 ManualResetEvent 객체를 공유시켜서 모든 스레드가 WaitOne 함수에서
대기 상태일 때 ManualResetEvent 를 Set 하여서 시그널을 준다면 각각의 스레드가 오차없이 동시에 명령을 수행할 거라고
생각했습니다.
// 복수 스레드에서 실행되는 함수
public void DoProc(string msg)
{
if (_resetEvent != null) // ManualResetEvent 객체
_resetEvent.WaitOne();
DateTime time = DateTime.Now; // WaitOne 이후 시간 확인을 위해
Console.WriteLine(time.ToString("yyyy-MM-dd HH:mm:ss.fffff") + " " + msg);
}
위와 같은 코드를 테스트 하면 콘솔에 출력된 시간이 문제 없이 같은 시간에 찍혀 있는 경우도 있지만
가끔 다를 때도 있습니다.
Task 방식의 문제인가 해서 Thread 로 변경하여 Thread Priority 를 Highest로 변경해도 동일합니다.
ManualResetEvent 을 공유해서 동시에 시그널을 준다는 방식에 방식에 문제가 있어서 시간의 오차가 생기는건지 아니면
근본적으로 연산 처리 과정에서 시간차가 있을 수 밖에 없기 때문에 명령의 동시 처리라는 것이 불가능한지 알고 싶습니다.
그리고 테스트했던 간단한 소스는 첨부하였습니다.
감사합니다.
[최초 등록일: ]
[최종 수정일: 3/20/2017]