2011-01-07 5 views
0

나는 .. C++의 OpenMP에서 C#을 스레드의 효과를 달성하기 위해 부모 나 아이도 합류 할 기다리는스레드

Thread t=new Thread(func1); 
t.Start(); // Do something 
// Do something else 

주의가 필요합니다 ..

나는이 작업을 수행 할 수 있습니다 C++ OpenMP ??

감사합니다,

+0

제가 알기 론 OpenMP의 핵심은 컴파일러가 여러 스레드를 생성하는 코드를 생성한다는 것입니다. – Dima

+0

스레드를 시작하고 스레드가 끝날 때까지 기다리지 않으려면 어떻게해야합니까? – Betamoo

+1

OpenMP가 당신이 찾고있는 곳이라고 생각하지 않습니다. 모든 표준 스레딩 라이브러리는 수행중인 작업을 수행 할 수 있습니다. OpenMP는 병렬화 할 수있는 코드 섹션을 자동으로 병렬 처리합니다. – Jimmeh

답변

2

의 OpenMP는 C#을 스레드보다 더 높은 수준의 스레딩 라이브러리 종종 직렬 응용 프로그램에 일부 스레딩을 추가 거의 자동으로 사용됩니다. #pragma omp parallel 지시문을 사용하여 원하는대로 구현할 수 있습니다. 지시문은 여러 스레드의 지시문 블록 내에서 코드를 자동으로 실행합니다. 그런 다음이 병렬 섹션에서 함수를 호출 할 수 있습니다.

OpenMP의 강점은 몇 가지 지시문을 사용하여 기존 코드에 스레드를 추가하는 것이 간단하다는 것입니다. 그러나, 나는 복잡한 일을하고 싶다면 더 낮은 레벨의 쓰레드 라이브러리를 사용하는 것이 더 쉽다는 것을 발견했다.

C# 스레드와 비슷한 인터페이스를 사용하려면 Boost.Thread 라이브러리를 살펴보십시오. 이것으로 거의 같은 구문으로 원하는 것을 할 수 있습니다 :

#include <boost/thread.hpp> 

//creates the thread object and starts the thread, returns immediately 
boost::thread th(func1); 

//... 
//do something else 
//... 
+0

즉 OpenMP에서 내가 원하는 것은 불가능하다는 뜻입니까? – Betamoo

+0

스레드가 주 스레드로 다시 참여하는 것을 원하지 않는다면 OpenMP에서 이것이 어려울 것이라고 생각합니다. 대부분의 OpenMP 구문은 모든 병렬 연산을 완전히 포함하는 블록이며 블록 외부에서 직렬로 연결되는 것으로 가정합니다. 이것은 일을 이해하기 쉽게 만들고 엉망이되지는 않지만 할 수있는 일을 제한합니다. 이것은 OpneMP로는 할 수없는 것을 원하는 것은 아니라는 말입니다. 나는 그것이 꽤 까다 롭다고 생각합니다. 그러나 오랜 시간에 OpenMP를 사용하지 않았기 때문에 내가 모르는 쉬운 방법이있을 수 있습니다. –

+0

가장 가까운 것은'#pragma omp parallel sections'과 그 뒤를 이어 각 스레드 코드가 다른 스레드에서 실행되도록하는'#pragma omp parallel section' 지시어입니다. 그러나 이것은 자동으로 끝에 스레드를 조인합니다. –

관련 문제