Was sind gcc auf linux-Pendant zu microsoft ' s kritische Abschnitte?
Microsoft Visual C++ Compiler haben die EnterCriticalSection
und ExitCriticalSection
Objekte zu ermöglichen, die für die Synchronisation zwischen threads.
Was ist die GCC-äquivalent?
Sehe ich Referenzen rund um __sync_synchronize
zusammen mit __scoped_lock
In der Tat sehe ich die Rede von einer Anzahl von atomaren __sync
Funktionen zusammen mit einer Reihe von
__atomic
lieben.
Ich tatsächlich schon mit __sync_fetch_and_add
für meinen atomic increment
Soll ich mich mit __atomic_add_dispatch
statt?
Was ist der Unterschied?
Welche sollte ich verwenden? Gibt es einige Konstrukte in C++, die ich verwenden kann, in der sowohl die neueste version von GCC und Visual C++ 2010, die verfügbar sind, so werde ich schriftlich einige cross-Plattform-code.
Ich sehe boost hat einige Funktionen zur Verfügung, aber aus verschiedenen Gründen bin ich mir nicht erlaubt die Verwendung von boost unter windows.
InformationsquelleAutor Matt | 2010-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Linux (und anderen Unixen) müssen Sie die Verwendung von PThreads, oder Posix-Threads. Es gibt kein äquivalent zu Kritischen Abschnitten, die auf Windows, verwenden Sie einen Mutex statt.
EDIT: Siehe ersten Kommentar unten-scheinbar Posix-Mutexe sind die gleichen wie Win32 Kritische Abschnitte, Sie sind gebunden an einen einzelnen Prozess.
Ah -- wusste nicht, dass. Müssen zerschlagen Terminologie wiederverwenden.
Auch, Win32 Kritische Abschnitte sind viel schneller als Win32 Mutexe, weil Sie umgesetzt werden im user-space und nicht mit dem overhead in Zusammenhang mit dem system-Aufruf. Ich weiß nicht, über Posix-Mutexe obwohl ?
Ich habe einige Tests, und in schweren Anfechtung von Bedingungen, die durch viele threads, windows' kritische Abschnitte sind deutlich schneller als linux mutex
Wäre nicht überrascht haben mich so oder so. Sie sind zwei verschiedene Tiere unter der Haube, um meine (sehr begrenzte) Verständnis. Ich weiß, die Windows-Jungs verbrachten viel Zeit auf die Optimierung der Art und Weise sperren zu Verhalten.
InformationsquelleAutor Billy ONeal
Prüfen Sie hier: http://en.wikipedia.org/wiki/Critical_section
InformationsquelleAutor Tutankhamen
EnterCriticalSection
und der rest der APIs sind Win32-APIs. Soweit cross-Plattform-Synchronisierung-APIs, ich glaube nicht, dass es irgendwelche (da Sie erwähnen Sie nicht verwenden können, boost). Auch Sie erwähnte cross-Plattform ist, bedeutet dies, verschiedene Architekturen zu (für den gcc-Teil also).Ich habe gesehen, eine große Umsetzung, wo es einen gemeinsamen Satz von APIs zur Verfügung gestellt, die waren bedingt kompiliert, um die native APIs (wie fetch_and_add auf AIX) oder verwendet pthreads-Win32-APIs.
Ich habe einmal versucht zu verwenden posix-threads unter win32 sondern lief in einen Haufen von Problemen (das war aber eine sehr alte version). Jetzt YMMV.
InformationsquelleAutor Gangadhar
Wenn Sie entwickeln Programme nur für die Windows-Plattform, ich denke, der beste Weg ist die Verwendung von Win32-API. Ansonsten können Sie die Qt-C++ - Bibliotheken (für diesen Zweck Qt-Core ist genug).
Siehe auch: QMutex und QMutexLocker
Sie können auch verwenden: QReadWriteLock
InformationsquelleAutor Amith Chinthaka