2014-12-23 4 views
-2

는 다음과 같은 코드를 생각해 보자.
위의 코드를 가진 프로세스의 인스턴스 3 개를 실행합니다. 예를 들어 p1, p2 & p3 (실행 한 순서 임)입니다.
p1 창을 누르고 p2가 잠금을 획득하고 p2를 누른 후 p3이 다음에이를 획득하고 p3을 누른 후 p1로 돌아갑니다. 그러나 p1을 획득하고 클릭하고 p1을 릴리스하고 p2를 획득하고 p2를 클릭하면 p1 (!!!)이 잠금을 획득합니다 (예상대로 p3이 아님).
다음으로 차례 차례로 누가 스택을 가지고 있지 않습니까? 나는 또한 1의 동일한 결과의 세마포어로 시도했다.
아이디어가 있으십니까?명명 된 뮤텍스 크로스 프로세스가 획득 주문

+0

"다음"이 없습니다. 경쟁 조건이 있습니다. –

+0

그래서 어떤 종류의 폴링 메커니즘입니까? 뮤텍스가 요청되고 현재 사용 중일 때 요청 프로세스는 사용 가능할 때까지 폴링합니다. 이 경우 FIFO 큐가 더 좋지 않습니까? –

+0

'lock' 문에서 사용되는 in-process 객체 모니터와는 달리, '뮤텍스'(named 또는 not)는 잘 정의 된 획득 순서를 가지고 있지 않습니다. 동일한 프로세스 내에서도 라운드 로빈 (round-robin)이 보장되지는 않으며 확실히 프로세스간에 (즉, 명명 된 뮤텍스 케이스에서) 그렇지 않습니다. 아마 당신은 여기에서 다른 어떤 더 넓은 목표를 가지고있을 것입니다; 당신은 당신이 실제로 원하는 결과를 설명하기 위해 질문을 분명히해야합니다. 작동 할 수있는 대체 접근법이있을 수 있습니다. –

답변

0

어떤 스레드가 Mutex을 획득 할 것인지를 보장하거나 예측할 수는 없으며, 프로세스 중 하나만이 프로세스를 획득 할 수 있습니다.