Ist es möglich, dass ein Thread-Pool mit einer einzelnen Thread-Funktion ohne Mutex-Sperre ausgeführt wird?
Ja, es ist möglich. Aber es hängt von Ihrer thread_func
Funktion ab. Wenn Sie eine gemeinsam genutzte Ressource zugreifen, zum Beispiel eines Zähler und Sie nicht über einen Mutex verwenden, dann könnten erleben Sie einen Renn Zustand:
int counter; // set to 2 in main function
void* thread_func(void *p) {
counter = counter + 1;
}
- Thread A von dem Zähler (Wert lautet: 2)
- Thread B liest aus dem Zähler (Wert: 2)
- Thread B erhöht Zähler (Wert: 3)
- Thread A erhöht Zähler (Wert: 3)
Dies passiert, weil Thread A immer noch den Wert 2 für den Zähler hat und 1 addiert, was zu 3 (wieder) führt, obwohl der Zählerwert nach normalem Verständnis 4 sein sollte, nachdem beide Threads den Wert erhöht haben.
Wenn Sie einen Mutex hinzufügen, müssen die Threads auf einen anderen Thread warten, der derzeit den Zählerwert ändert.
Ich bin nicht sicher, was Sie genau meinen, aber wenn Sie die gleiche Funktion für alle Threads in Ihrem Pool ausführen möchten, hängt es davon ab, ob Sie auf eine freigegebene Ressource e zugreifen. G. ein Zähler oder ähnliches. – CRoemheld
@marcusshep Bitte verwenden Sie keine Codeformatierung für zufällige Phrasen, nur für Code- und Variablen-/Funktionsnamen. – interjay
Sie können die gleiche Thread-Funktion für mehr als einen Thread verwenden. Wenn Sie auf freigegebene Daten zugreifen, die gerade geändert werden, benötigen Sie wahrscheinlich einen Mutex. – interjay