2012-10-08 4 views
2

Java에서 세마포어를 사용하여 배열을 정렬하는 작업이 있습니다. 이 작업은 매우 쉽고 몇 분 안에 끝내기도하지만 마지막 부분 병합을 위해 해결했습니다.세마포어를 사용하여 배열 정렬

우리의 임무는 주어진 배열을 두 개로 나누고, 세마포어를 사용하여 동시에 파트를 정렬 한 다음 세마포어를 사용하여 다시 병합하는 것이 었습니다.

제 질문은 마지막 배열을 채우는 동안 하나 이상의 스레드를 사용하여 병합하는 목적은 무엇입니까? 각 요소는 한 번에 배열에 요소를 밀어 넣을 수 있기 때문에 항상 서로 기다려야합니다.

아니면 뭔가 빠졌습니까? 감사합니다. .

+1

정렬 스레드가 작업을 마친 후에는 고유 한 병합 스레드를 깨우기 위해 세마포어를 사용해야 할 수도 있습니다. –

+0

두 개 이상의 스레드가 동시에 작동 할 수 있지만 가장 느린 스레드를 기다려야 할 수도 있지만 순차적으로 모든 작업을 빠르게 처리해야합니다. – tuergeist

+2

@ tuergeist [숙제 표가 삭제되어 더 이상 사용되지 않아야 함] (http://meta.stackexchange.com/q/147100). – Gilles

답변

1

결과 배열의 반대쪽에서 두 개의 다른 스레드로 병합 할 수 있습니다. 각 스레드는 결과 배열의 절반까지 채워야합니다. 쓰레드는 세마포어를 'barrier'Implementing an N process barrier using semaphores으로 사용하여 서로 기다릴 수 있습니다.

+0

정답이므로 작동하기 때문에 '규칙적인'접근 방식이 비슷한 효과를 주므로 완전히 해결할 수 있습니다. – Atais

관련 문제