1

Visual Studio에서 C++ 프로그램을 작성하여 공원에서 줄을 처리 할 수 ​​있습니다. 나는 공원에있는 모든 고객을 가지고 있으며 openmp로 멀티 스레딩을 사용하여 고객에게 서비스 할 수 있기를 원합니다.이것을 시뮬레이션하기 위해 멀티 쓰레딩과 함께 사용하는 좋은 방법은 무엇입니까?

내가 플러그인을 넣을 때, 내가 원하는 모든 고객을 위해 같은 고객에게 동시에 서비스하는 여러 스레드가 있습니다.

두 개의 스레드와 4 개의 고객이있는 경우 스레드 2가 고객 2를 수행하는 동안 고객 1을 수행하는 스레드를 원합니다. 그러면 스레드 1이 고객 3을 처리하고 고객 2를 고객 4와 동일한 스레드 시각. 나는 가능한지 또는 더 좋은 방법이 있는지 모르지만 openmp를 사용해야합니다. 귀하의 의견을 보내 주셔서 감사합니다.

답변

1

iteraction을 고객으로 연결하고 각 고객 (costumer)을 정적 방식으로 각 스레드에 제공 할 수 있습니다. 정적

#pragma omp parallel for schedule(static, CHUNKSIZE) 
for(i = 0; i < customer_max; i++) 
{ 
// do something with customers 

} 

: 그들은 루프 반복을 실행하기 전에 여기에, 모든 스레드는 반복을 할당됩니다. 반복은 기본적으로 스레드간에 동일하게 나뉩니다. 그러나 매개 변수 CHUNKSIZE에 정수를 지정하면 특정 스레드에 청크 반복 수를 할당합니다. 스레드 (2) 의상 (1)과 (3)

만약을 실행 할 때

그래서 2 개 스레드, 4 개 고객과의 예제에서 당신은, chunksize 영역은 = 1 따라서, 스레드 0 코리아가 0과 2 모두를 실행 사용합니다 CHUNKSIZE을 지정하지 않으면 스레드 0은 처음 2 개의 costumers를 실행하고 스레드 1은 나머지 2를 실행합니다.

각 스레드가 동적 방법으로 costumers를 제공하는 것을 선호한다면 동적 배포를 사용할 수 있습니다.

#pragma omp parallel for schedule(dynamic) 
    for(i = 0; i < customer_max; i++) 
    { 
    // do something with customers 

    } 

동적 스케줄은 반복적으로 또는 예측할 수없는 양의 작업이 필요한 for 구문의 경우에 적합합니다. 귀하의 경우와 마찬가지로, 다른 시간대에 봉사하는 소비자가있는 경우에도 마찬가지입니다.

+0

대단히 감사합니다. 방금 멀티 프로세싱을 시작했고 이것은 나에게 도움이 될 것입니다. – user1504257

+0

Np, 환영합니다. – dreamcrash

관련 문제