Ich habe einige Bibliothekscode, der manchmal Multithread ausgeführt werden muss, aber häufiger Singlethread. Es ist eine Menge kleiner Routinen, die sehr häufig aufgerufen werden. Frühere Erfahrung und Profilerstellung zeigen, dass zusätzliche Verzögerungen die Leistung beeinträchtigen können, daher möchte ich unnötige Gemeinkosten vermeiden.C++ 03 Nullzeiger gegen Null Objektmuster: Auswirkungen auf die Leistung
Ich kann keine separate Instanz der Bibliothek für Single-und Multithread-Verwendung bereitstellen, noch kann ich einen Thread-sicheren Wrapper die Single-Thread-Version bereitstellen. Diese beiden Einschränkungen sind auf das Design der Bibliothek zurückzuführen.
Meine bevorzugte Methode, die Routinen zu schützen, wenn Multithread ausgeführt wird, ist die Verwendung eines Mutex mit Gültigkeitsbereich. Mein erster Gedanke war in Richtung this SO answer.
Die meiste Zeit werden die Routinen jedoch single-threaded ausgeführt, und ich mag den Overhead der Nullzeigerüberprüfung nicht. Dies wird auf einem sehr langsamen ARM9-Prozessor ausgeführt und jeder Zyklus zählt.
In der Praxis werde ich wahrscheinlich mit dem Nullzeiger-Check und Profil gehen, um zu sehen, was es kostet, aber ich frage mich, ob es einen besseren Weg gibt. Zum Beispiel das Null-Objekt-Muster oder die Bibliothek, die einen Callback aufruft.