2010-12-18 6 views
1

C/C++에서 사용자 수준 스레드 (ULT)의 OS 독립적 스레딩 모델을 구현할 수 있습니까? 즉, 프로세스를 논리적으로 ULT로 분해하고 이들 사이에 스위치를 동적으로 만들 수 있습니까?OS 독립적 인 C++ 스레딩?

+0

내가 물었을 때 내가 무엇을 가지고 있는지 볼 수 있습니다. http://stackoverflow.com/questions/4298986/is-there-something-to-replace-the-ucontext-h-functions – zneak

답변

5

Boost.Thread는 플랫폼 간 스레딩에 상당한 양의 추상화를 제공합니다.

+2

그리고 곧 나오는 C++ 0x 표준에 따르면 자동적으로'std :: thread'와 OS에 독립적 인 쓰레드가 있습니다. –

+0

오, 이걸 알고있어. 그래서 자바와 같은 언어 기능이 될 것입니까? – mihsathe

+0

@mihsathe, 예. –

1

OpenMP는 많은 일반적인 사용 사례에 대해 스레드를 처리하는 좋은 방법입니다.

3

POSIX 스레드 만 사용하십시오. Windows를 지원해야하는 경우 Windows를 합리적으로 준수하는 구현이 있습니다.

+0

답변 해 주셔서 감사합니다. 그러나 구현에 대해 묻고있었습니다. ULT를 구현할 수 있습니까? – mihsathe

+0

@mihsathes, 궁극적으로 스레드와 프로세스는 운영 체제에서 제공하는 서비스입니다. 새 스레드를 생성하려면 OS 특정 API (또는 OS와 통신하는 래퍼 라이브러리)에 액세스해야합니다. –

+0

@Charles 그런 다음 커널 수준 스레드 (KLT) 및 사용자 수준 스레드 (ULT)의 구현의 차이점은 무엇입니까? – mihsathe

1

C에서는 약간의 이식성 (POSIX 필요) 사용자 레벨 스레딩 라이브러리는 GNU Pth입니다. 우선 순위 대신 협력을 사용하고 사용자 공간에서 스레드 단위 스택 및 기타 구조를 구현합니다. 예상대로 이것은 이 아니며은 OS 수준 스레딩과 동일한 성능 특성을 제공합니다. 그러나 동일한 추상화를 제공합니다. 윈도우 7에

+2

이 라이브러리의 이식성에 대한 주장은 내가 마지막으로 확인한 마지막 우스운 일이었습니다. –

1

자신의 사용자 모드 스케줄러 구현하는 방법이있다 : http://msdn.microsoft.com/en-us/library/dd627187%28v=vs.85%29.aspx

이 사용자 모드 스케줄러와 가장 좋은 방법을 사용하여 사용자 모드 스레드 프로세스 탐색기 개방되어 있는지 확인 할 수있는 API가 basecally입니다 및 커널 시간 0을 참조하십시오.

실제로 UMS를 성공적으로 구현 한 사람들을 알고 있지만, Microsoft는 API에서 몇 가지 오류를보고했습니다. . .

+1

"OS 독립적"은 어떤 방식으로 이런 방식입니까? 모든 Windows 버전에서 사용할 수있는 것은 아닙니다! – caf

+0

그것은 아니지만, 사용자 모드 스레드를 만드는 유일한 방법은 아니지만 다른 OS에는 이와 같은 것이 없습니다. POSIX가 커널 스레드를 사용자 스레드와 혼합 할 수 있다고 생각하지 않습니다.이 API는 xD를 수행합니다. 그게 내가 ums 스레드를 성공적으로 구현하는 유일한 방법이라는 것을 알고 있지만, 모든 XD를 모른다. – DVD

1

ZThread는 크로스 플랫폼 C++ 라이브러리입니다.

C++ 2에서 생각해 보면이 라이브러리를 사용하여 멀티 스레딩 응용 프로그램을 설명합니다.

관련 문제