현재 한 번에 약 20 개의 스레드로 실행되는 프로그램이 있습니다. 나는 멀티 스레딩에 상당히 익숙하지 않기 때문에 적절한 데이터 보호에 대해 다소 혼란스러워합니다.이벤트 또는 뮤텍스?
현재 내 스레드는 데이터를 잠금으로 설정하여 이벤트를 잠금 해제합니다. 대부분의 데이터가 2 ~ 3 개의 스레드 사이에서만 공유되므로 임계 섹션을 초과하여이 옵션을 사용하기로 결정했습니다. 따라서 하나의 스레드가 읽기를 방해하는 반면 20 개의 스레드를 모두 중지하면 쓰레기로 보입니다. 뮤텍스가 어떻게 작동하고 어떻게 구현하는지 명확하게 설명하는 소스를 (쉽게) 찾을 수 없다는 사실 때문에 뮤텍스 이벤트를 사용했습니다.
내 멀티 스레딩에 Win32 API를 사용하고 있습니다. 내 현재 설정에서는 데이터를 잠그기 위해 이벤트를 사용하여 내 이벤트가 "DataUnlock"과 유사 할 것입니다. 설정하지 않으면 데이터가 작동 중임을 알 수 있습니다. 설정된 경우 데이터를 처리하는 것이 좋습니다. 따라서 임시 변통 데이터 잠금은 이와 유사합니다.
WaitForSingleObject(DataUnlock,INFINITE); //Wait until the Data is free
ResetEvent(DataUnlock); //Signal that the data is being worked on
...work on Data...
SetEvent(DataUnlock); //Signal that the data is free to use
첫 번째 질문은 두 개의 스레드 만 데이터에 액세스 할 때 뮤텍스를 사용하는 것과 같은 좋은 (효율적인) 것입니까?
두 번째 : 데이터에 액세스하기 위해 대기하는 두 개 이상의 스레드가있을 경우 데이터가 해제 될 때 둘 다 트리거됩니다 (둘 다 ResetEvent에 도달하기 전에 대기 상태를 유지합니까)? 그렇다면 뮤텍스에 동일한 문제가 있습니까?
마지막으로 : 뮤텍스가 좋은 경우 어떻게 구현할 것인가? (링크 또는 설명이 크게 감사 할 것입니다.)
감사합니다.