2014-03-24 3 views
0

에서 나는 루프를얼마나 많은 스레드 루프

for(int i=0;i<n;i++){//do something} 

를 생성 및 Visual Studio를 통해 그것을 실행하면 내 프로그램은 전체 루프, 모든 반복에 대한 스레드를 만들거나 변수 수의 뜻?

+0

모두 루프 본문에 따라 달라집니다. 기본값은 아니요. – Mgetz

+0

숫자 인쇄와 같은 간단한 작업입니다. –

+0

이것은 일반적인 루프이므로 스레드를 생성하지 않습니다. 여기에 코드가 누락 되었습니까? – user2802841

답변

3

Visual Studio를 통해 실행하면 내 프로그램이 모든 반복에 대한 스레드를 만들지, 전체 루프에 대해 또는 가변 개수입니까?

해당 사항 없음. 프로그램은 기본적으로 단일 실행 스레드를 가지며 새 루프를 만들지 않고 루프의 각 반복을 연속적으로 실행합니다.

OpenMP (또는 비슷한)과 같은 기능 만 있으면 반복마다 다른 스레드를 생성 할 수 있습니다.

#include <omp.h> 

#pragma omp parallel for 
for(int n=0; n<10; ++n) { printf(" %d", n); } 
printf(".\n"); 
+0

그러면 루프 내에서 동기화하지 않고 스레드를 생성하면 어떻게됩니까? 숫자를 출력 한 다음, 스레드가 각 루프에서 요청하는 모든 작업을 수행합니까? –

+0

@GeorgeIrimiciuc - 모든 스레드가 비동기 방식으로 실행되는 것과 같은 일입니다. 어떤 일이 일어나고 매번 같지 않을 수도 있습니다. – mah

+0

이 보충 질문은 OpenMP의 사양에 따라 크게 달라집니다. OMP와 관련하여 특별히 새로운 질문을해야합니다. 새 스레드를 생성 할 수 있고 OMP에서 사용하는 작업과 독립적으로 작동 할 수 있습니다. 그러나 악마는 세부 사항에 있습니다. OMP는 새로운 스레드에 대한 핸들/컨텍스트를 저장하는 방법에 영향을 미칠 수있는 범위 (또는 수명) 규칙을 제공하므로 나중에 해당 스레드를 견고하게 얻을 수있는 방법에 영향을 미칠 수 있습니다. –

관련 문제