[C++] Gibt es plattformübergreifende Semaphore?

  • Ersteller Ersteller Green Mamba
  • Erstellt am Erstellt am
G

Green Mamba

Gast
Hi,

es gibt eine zentrale Bibliothek, welche einen bestimmten Datensatz enthält. Diese ist eine statische LIB, welche unter Windows oder Linux laufen kann. Diese Bibliothek besitzt verschiedene Methoden zu lesen und schreiben von Daten. Zudem besitzt sie eine Funktion welche die Daten Evaluiert, bzw. verrechnet. Diese Bibliothek wurde bislang immer nur auf einem Rechner benutzt (Single-User).
Nun soll demnächst eine unbestimmte Anzahl von einer unbestimmten Anzahl an Anwendungen benutzt werden. Dies hat zur Folge, dass es Probleme gibt, wenn während einer Leseoperation der einen Anwendung, eine Andere auf die gleichen Daten schreibt (z.B. einen Datensatz löscht auf dem gelesen wird).
Das ganze soll jetzt mit Semaphoren derart abgeschottet werden, dass immer nur einer schreiben, aber viele lesen dürfen, solange nicht geschrieben wird.

Da diese Bibliothek von z.B. Qt-Anwendungen benutzt wird, selbst aber kein Qt benutzt, müsste es möglich sein einen Semaphor-Mechanismus zu implementieren, der auf Linux wie auch Windows zu kompilieren ist. Ich habe in den Standard-Bibliotheken nichts dazu gefunden.
Gibt es so einen Plattformübergreifenden Mechanismus überhaupt, oder muss jetzt für jede Plattform ein eigener Mechanismus geschrieben werden?

Vielen Dank schonmal für die Hilfe,
Mamba
 
Zuletzt bearbeitet:
soweit ich weiß sind threads etc. generell nicht standardisiert. und damit gibts natürlich auch keine standardisierten synchronisationskrempel.

boost bietet ne threads bibliothek, die wird dann wohl auch semaphoren oder etwas ähnliches haben. bei den boost standards sollte das wohl so ziemlich das kompatibelste sein was man für c++ bekommen kann.
 
@Boron
Wenn ich das richtig verstehe ist POSIX doch linux-only!?

@Siberian..Husky
Danke, das werde ich mir mal ansehen. Hoffe dass noch weitere Tipps kommen. :)
 
So weit ich weiß hat sich MS schon mit WinNT schon zu großen Teilen an den POSIX Standard gehalten.
Wenn ich genauer darüber nachdenke halte ich es allerdings für unwahrscheinlich, dass das auch die POSIX Thread (pthread) beinhalten.
Ein Blick in die MSDN hat das gerade betätigt.

aber die Boost-Library ist auf jeden Fall einen Blick wert.
Die wissen wie man C++ programmiert.

Ich finde da allerdings keine Semaphoren, sondern nur Mutexes.
Könnte aber für dich reichen.

Nette Erklärung zu den Unterschieden :): http://koti.mbnet.fi/niclasw/MutexSemaphore.html
 
@ boost: http://www.boost.org/doc/html/threads/faq.html#id2786940

@ posix: microsoft vertreibt (kostenlos) einen posix layer für windows. ist im grunde sowas wie cygwin. ansonsten wäre mir neu das die posix kompatible apis direkt im betriebsystem haben(die wichtigen, eben threads und io, sind aufjedenfall unterschiedlich). allerdings ist die funktionsweise in der regel fast identisch zu posix(der kompatibilitäts layer wird also nicht viel arbeit gewesen sein).
 
Semaphore und Mutexe sind normalerweise OS spezifisch zu implementieren.
D.h. eine Klasse die per #ifdef den jeweiligen Code ausführt sollte das Problem lösen.

MfG

Arnd
 
Die Threadunterstützung von QT wäre ideal, allerdings basiert ein Programm nicht auf Qt. Zwei benutzen Qt, und das besagte Programm eben gerade nicht. Soll auch in Zukunft nicht wegen der Preispolitik.
Die beiden Qt-Programme sprechen jeweils von verschiedenen Rechnern das besagte Programm an.
Zudem soll letzteres Programm von allen Bibliotheken unabhängig laufen, also einzig auf STL basieren, und offen sein für weitere Clients. :)
 
Zurück
Oben