2009-12-03 7 views

답변

3

장벽은 인위적인 예제를 통해 모든 곳에서 사용할 수 있지만 진행하기 전에 다른 스레드의 결과가 모두 필요한 곳에서는 종종 분산/축소 방법으로 보입니다.

예를 들어 정렬을 병렬 처리하려면 목록을 n 번 나누고 n 개의 스레드를 시작하여 섹션을 정렬하고 일시 중지하십시오. 모두 완료되면 부모가 마침내 조합이 가능하다는 것을 알게되면 죽을 것입니다 정렬 된 청크. (나는 더 나은 방법이 있다는 것을 알고 있지만 그것은 하나의 구현 임).

내가 본 다른 곳은 병렬 네트워킹입니다. 은 페이로드 당 일정량의 데이터를 보내려면입니다. 따라서 인터페이스는 버킷을 시작하여 전송을 보내기 전에 모두 버킷을 채울 때까지 대기합니다. 분할 된 T1 라인에 대해서 생각해 보면, 64 개의 다중화 된 파티션을 통해 하나의 데이터 버스트를 전송하는 것은 1 개의 파티션의 데이터를 보내는 것보다 낫습니다. (패킷은 0으로 패딩되어야하기 때문에 기본적으로 비용이 같습니다.)

희망 사항은 문제에 대해 생각할 수있는 몇 가지 사항입니다.

1

예 : 스레드 세트가 결과 세트를 계산하기 위해 동시에 작동하고 결과 세트 (부분/장벽".

장벽은 여러 개의 스레드 주위에 솔루션을 만들지 않고도 여러 스레드를 동기화하는 것을 더 쉽게 만듭니다. conditions & mutexes.

나는 종종 barriers을 보았다고 말할 수 없다. 어떤 시점에서 스레드 수가 증가하면 가능한 "dead-locks"를 관리하는 데있어보다 "분리 된"시스템을 고려하는 것이 좋습니다.

0

MSDN : 모든 작업이 장벽에 도달 할 때까지 병렬 작업에서 개별 작업이 계속되지 않도록하는 개체입니다. 단계에서 병렬 작업이 발생하고 각 단계에서 작업간에 동기화가 필요한 경우에 유용합니다.

Found here