2010-12-18 13 views
1

Ist es möglich, OS-unabhängiges Threading-Modell von User Level Threads (ULT) in C/C++ zu implementieren? Mit anderen Worten, können wir einen Prozess logisch in ULTs aufteilen und dynamisch zwischen ihnen wechseln?Betriebssystemunabhängiges Threading in C++?

+0

Sie könnten untersuchen, was ich bekam, als ich fragte: http://stackoverflow.com/questions/4298986/is-there-etwas-zur-replace-the-ucontext-h-functions – zneak

Antwort

5

Boost.Thread bietet eine Menge Abstraktion für plattformübergreifendes Threading.

+2

Und in der kommender C++ 0x Standard, haben Sie automatisch OS-unabhängige Threads mit 'std :: thread' –

+0

Oh, gut zu wissen. Also wird es eine Sprachfunktion wie Java sein? – mihsathe

+0

@mihsathe, ja. –

1

OpenMP ist eine gute Möglichkeit, Threads für viele häufige Anwendungsfälle zu verwenden.

3

Verwenden Sie nur POSIX-Threads. Es gibt eine einigermaßen konforme Implementierung für Windows, wenn Sie Windows unterstützen müssen.

+0

Vielen Dank für die Antwort. Aber ich habe nach der Implementierung gefragt. Ist es möglich, ULTs zu implementieren? – mihsathe

+0

@mihsathes, schließlich sind Threads und Prozesse ein Service, der vom Betriebssystem bereitgestellt wird. Um einen neuen Thread zu erstellen, ist der Zugriff auf eine OS-spezifische API erforderlich (oder eine Wrapper-Bibliothek, die mit dem Betriebssystem kommuniziert) –

+0

@Charles was ist dann der Unterschied bei der Implementierung von Kernel Level Thread (KLT) und User Level Thread (ULT)? – mihsathe

1

In C ist eine etwas portable (es erfordert POSIX) Benutzer-Ebene Threading-Bibliothek ist GNU Pth. Es nutzt Kooperation statt Preemption und implementiert pro-Thread-Stack und andere Strukturen im Benutzerraum. Wie erwartet, wird dies nicht bieten die gleichen Leistungsmerkmale wie OS-Ebene Threading. Es bietet jedoch einige der gleichen Abstraktionen.

+2

Der Anspruch dieser Bibliothek auf Portabilität war ziemlich lächerlich zuletzt habe ich überprüft ... –

1

unter Windows 7 gibt es einen Weg, um Ihre eigenen User Mode Scheduler zu implementieren: http://msdn.microsoft.com/en-us/library/dd627187%28v=vs.85%29.aspx

Dies ist basecally eine API-Benutzermodus Themen mit einem User Mode Scheduler und das Beste, was zu machen Process Explorer öffnet und siehe Kernel Time 0.

Hwever Ich kenne Leute, die erfolgreich die UMS implementiert haben, aber die Microsoft berichtete einige Fehler auf der API. . .

+1

Wie ist das in irgendeiner Weise "OS unabhängig"? Es ist nicht einmal auf allen gängigen Windows-Versionen verfügbar! – caf

+0

Es ist nicht, aber es ist die einzige Möglichkeit, Benutzermodus Threads zu machen, kein anderes Betriebssystem haben so etwas, ich glaube nicht, dass POSIX Kernel-Threads mit Benutzer Threads mischen kann, diese API tut das xD. Das weiß ich, es ist der einzige Weg, ums-Threads erfolgreich zu implementieren, aber ich weiß es nicht alles XD. – DVD

1

Werfen Sie einen Blick auf ZThread ist eine Cross-Plattform-C++ - Bibliothek.

Denken in C++, Band 2 verwendet diese Bibliothek, um Multi-Threading-Anwendung zu erklären.