함수 호출에서 자원을 획득 (잠금)하려는 경우가 있지만 콜백 (다른 스레드)에서 프로세스의 종료를 알리는 경우가 있습니다. (리소스가 외부입니다. 기본적으로 특정 버스는 시작할 때 사용 중이며 콜백으로 다시 사용 가능합니다.)한 스레드에서 잠그고 다른 스레드에서 해제 할 동기화 객체
잠금/임계 섹션에서는 이것이 불가능합니다. Mutex도 시도했지만, 다른 스레드에서 릴리스했기 때문에 예외 만 발생했을 수 있습니다.
여기에있는 옵션은 무엇입니까?
내가
- ()가 잠시 (수행 한 후 휘발성 부울에 대한 액세스를 고정하고, WaitOne 대신 잠) "수동으로"동기화 그들이하는 부울을 만들 하나에
- 사용 이벤트를 할 수있는 것 동기화 객체를 관리하는 세 번째 래퍼 스레드에서 모든 것을 스레딩하십시오.
간단히하기 위해 나는 아마도 bool로 갈 것입니다. 또는 바람직하게는 런타임에서 제공하는 메커니즘. 콜백은 외부 라이브러리에서 제공됩니다.
업데이트 : 나는 또한 지금 내 요구에 맞는 것으로 보이는 세마포어를 발견했습니다. 나는 누군가에게 더 나은 아이디어가 있다면 누군가에게 물을 것이다./다른 누군가도 이것을 유용하다고 생각할 것이다.
** 당신이하고 싶은 일에 대해 ** 매우 구체적 일 수 있습니까? 당신이 원하는 것은'Monitor.Wait'와'Monitor.Pulse' /'Monitor.PulseAll'로 할 수 있습니다. –
@Marc @Marc 자신의 작업을 요청하는 여러 스레드를 동시에 동기화하려고합니다. 내 문제는 요청을 시작할 때부터 콜백이 호출 될 때까지 작업을 수행한다는 것입니다. MSDN의 Monitor를 보면, 나는 enter를 호출 할 수없고 2 개의 다른 스레드에 남겨 둘 수 없었다. 펄스를 사용하려면 리소스에 대한 액세스를 직접 관리하는 논리를 작성해야합니다. –
@AndreasReiff는 세마포어를 원하는 것 같습니다. –