2017-09-26 3 views
1

Ich verschiebe meinen Code von der ACE-Bibliotheksunterstützung zur Boost-Bibliotheksunterstützung. Ich muss ACE_Semaphore ersetzen. Es scheint, dass C++ 11 Semaphor-Methoden nicht unterstützt. Ich habe named_semaphore im Boost gesehen. Eine andere Wahl, die ich sah, war für POCO-Semaphore zu gehen, wo ich POCO-Bibliotheken einschließen muss. Bitte geben Sie mir Vorschläge, welcher der beste Weg ist, um voranzukommen.Kann ich boost named_semaphore anstelle von ACE_SEMAPHORE verwenden, während ich versuche, von ACE zu Boost-Bibliotheken zu wechseln?

Edit: Dies ist für Intra-Prozess Thread-Synchronisation.

Antwort

2

Die kurze Antwort ist: ja.

Wenn für intra-Prozess-Synchronisation, Sie einfach eine mit einem Mutex + Zustandsgröße emulieren können:

obwohl C++0x has no semaphores? How to synchronize threads?

Hinweis, in der Regel ein Mutex + Bedingungsvariable tun, als die konkrete Bedingung nimmt normalerweise nicht die Form eines Zählers an. (Z. B. Synchronizing three threads with Condition Variable)

Für Interprozess-Synchronisation verwenden Sie den genannten Semaphor. Ein Beispiel: How to limit the number of running instances in C++ Beachten Sie, dass es Implementierungsunterschiede gibt¹.

¹ z.B. Named_semaphore in Boost weist seine eigene freigegebene Ressource zu, während in ACE angenommen wird, dass der Benutzer es aus vorhandenen freigegebenen Speicherplatz zuweist. Im Boost können Sie natürlich auch, solange Ihre Plattform native Synchronisations-Primitive im Shared Memory unterstützt

+0

Es ist für die Intra-Prozess-Kommunikation. Ich werde meine Frage auch bearbeiten. Danke für die Information. – C0D3R

Verwandte Themen