Ich möchte erwähnen, dass Mutex nicht das einzige verfügbare Grundelement der Thread-Synchronisation ist und in einigen Szenarien weit davon entfernt ist.
Sofern eine Synchronisation erforderlich ist (siehe zwei andere Antworten, warum dies je nach Verwendung erforderlich sein könnte), sollten Sie nicht in die Mutex-Welt springen. Für etwas so genau wie ein Zähler (das ist, was ich in dem Code sehe) atomare Variablen (oder, in Ermangelung dieser, atomare Operationen auf nicht-atomare Typen) bieten oft eine bessere Leistung und einfacher Code.
In diesem speziellen Fall eine variable Erhöhen leicht in Thread-sichere Art und Weise getan werden kann, mit folgenden 11 C++ Code:
static void bar(std::atomic<int>& a)
{
a.fetch_add(1, std::memory_order_relaxed);
}
memory_order_relaxed
hier verwendet wird, ist wirklich weit hergeholt, und müssen nicht zwangsläufig anwendbar (jedoch oft gut für Zähler). Verwendet hier hauptsächlich für das Beispiel.
Hängt davon ab, wie 'a' an anderer Stelle verwendet wird. Kann 'a' irgendein' int' sein? Wie schützt man es richtig, wenn es etwas sein kann? Wahrscheinlich müssen Sie Ihre Sperre verwenden, bevor Sie 'bar' aufrufen. – Simple
Die Antwort ist ziemlich komplex, es sei denn, Sie können weitere Informationen darüber zur Verfügung stellen, wie diese Funktion verwendet wird. Die Variablen, die an diese Funktion übergeben werden, müssen geschützt werden und nicht die Funktion selbst. – Galik
@Galik: Dein zweiter Satz widerlegt deine erste, in der die Antwort auf diese Frage sehr einfach ist. –