2012-04-20 2 views
3

멀티 쓰레딩을 사용하는 C++ 언어로 라이브러리를 작성하고 있습니다. Windows에서 개발하고 있으므로 "Windows.h"(CreateThread, HANDLE WINAPI 등)의 메서드와 데이터 구조를 사용하고 있습니다.휴대용 C++ 멀티 쓰레딩

이제이 코드를 Windows 및 Linux에서 모두 실행 가능하게 만들고 싶습니다. 당신은 저에게 구현을위한 스레딩을 제안 할 수 있습니까?

이 응용 프로그램의 주요 요구 사항은 실행 속도이기 때문에 빠른 구현이 필요합니다.

감사합니다.

+6

C++ 11 표준 라이브러리는 멀티 스레딩을 지원합니다. – cmannett85

+0

@ cbamber85 - 그렇습니다. 그러나 그 사실에 근거한 담요 조언에주의하십시오. C++ 11 (평범하지 않은 작업)에 대한 실제 컴파일러 지원은 진행중이며 가변적입니다. –

+0

@SteveTownsend 맞습니다. gcc 동시성 지원이 C++ 11 언어 지원과 비슷한 수준에 있다고 가정 했으므로 가까운 곳이 아닙니다. – cmannett85

답변

11

새로운 std :: threads 라이브러리를 사용하는 것이 가장 좋습니다.이 라이브러리는 이동성이 뛰어나고 표준화되었으며 현대적인 스타일로 작성되었습니다. 당신이 (잘되어야 VC10과> GCC 4.4) C++ (11)에 대한 액세스 권한이없는 경우

std::thread my_thread(my_func, my_param); 

http://en.cppreference.com/w/cpp/thread

는 다음 표준 : : 스레드가 큰 더 많거나 적은 developement에 있습니다 부스트 :: 스레드, 부스트 라이브러리는 크로스 플랫폼과 이식성이있다 (최소한 주요 OS는 Win32 & 리눅스를 지원할 것이다). 당신이 가치가있을 수도 있습니다 알고리즘을 병렬화를 찾고 마지막 경우

http://www.boost.org/doc/libs/1_49_0/doc/html/thread.html

은 인텔의 TBB를 확인하면서, 그 평행 표준과 유사한 구조 :: 알고리즘

tbb::for_each(my_contaier.begin(), my_container.end(), my_func); 
를 제공하는 현대 C++ 쓰레드 라이브러리 MSVC는켜짐 대안 상당히 휴대용 (*) 및 비교적 비 간섭 라이브러리로

http://threadingbuildingblocks.org/

+0

Windows의 초기 부스트 스레드 라이브러리에 약간의 문제가 있습니다. 스레드는 정상적으로 실행되었지만 응용 프로그램을 종료하면 AV가 생성됩니다. 아마도 이후 릴리스에서 모두 수정 된 것 같습니다. 1이 있다고 생각합니다.35, 꽤 오래되었습니다 : ( –

+0

이 스레드에 따르면 'std :: thread'에 대한 VC10에서 알려진 문제점이 있습니다. 최신 부스트가 그 동안에 더 나은 내기 일 수 있습니다. http://stackoverflow.com/questions/9421235/ stdthread-class-in-vc-11-causes-random-crashes-any-workarounds –

+0

@MartinJames 1.35는 오래되었지만이 질문에 가중치가 없습니다 – 111111

1

부스트 : 스레드는 새로운 표준 C++ 11에서 또한 솔루션 표준 : 스레드입니다.

1

, 음 (이전 버전) g ++ 및 지원

표준 C++가 아니지만 OpenMP 자체가 표준입니다.

#pragma omp parallel for 
for (int i=0; i!=x; ++i) { 
} 

또한 작업 및 타이밍 기능 (더)를 가지고 있지만, 내 생각에 그것은 왕의 징계에 대한 exampled 병렬 위에있다 : 그것은이의 당신 paralllelize 쉽게 루프 수 있습니다.


(*) pragma와 함께 있으면 전혀 이식 할 수 없습니다.

관련 문제