Der Mac-Build meiner (hauptsächlich POSIX) Anwendung erzeugt einen untergeordneten Thread, der CFRunLoopRun() aufruft, um eine Ereignisschleife auszuführen (um Änderungen der Netzwerkkonfiguration von MacOS zu erhalten).Ist es sicher, CFRunLoopStop von einem anderen Thread aufzurufen?
Wenn es an der Zeit ist, Dinge zu packen und wegzugehen, ruft der Hauptthread CFRunLoopStop() in der Run-Schleife des untergeordneten Threads auf. An diesem Punkt gibt CFRunLoopRun() den untergeordneten Thread, den untergeordneten Thread und den main zurück Der Thread (der blockierte und darauf wartete, dass der untergeordnete Thread beendet wird) kann fortgesetzt werden.
Dies scheint zu funktionieren, aber meine Frage ist: Ist dies eine sichere/empfohlene Möglichkeit, es zu tun? Insbesondere wird CFRunLoopStop() von einem anderen Thread aufgerufen, der einen Racebedingung verursachen kann? Apples Dokumentation schweigt zu dem Thema, soweit ich das beurteilen kann.
Wenn CFRunLoopStop() aus dem Hauptthread aufrufen nicht die Lösung ist, was ist eine gute Lösung? Ich weiß, dass ich den untergeordneten Thread CFRunLoopRunInMode aufrufen() und aufwachen könnte, um einen booleschen Wert oder etwas zu überprüfen, aber ich würde es vorziehen, wenn der untergeordnete Thread keine Abfrage durchführen würde, wenn ich es vermeiden kann.