私の(主にPOSIX)アプリケーションのMacビルドは、CFRunLoopRun()を呼び出してイベントループを実行する(MacOSからネットワーク構成変更イベントを取得する)子スレッドを生成します。
荷造りして立ち去るとき、メインスレッドは子スレッドの実行ループでCFRunLoopStop()を呼び出します。その時点で、CFRunLoopRun()は子スレッドに戻り、子スレッドは終了し、メインスレッド(子スレッドが終了するのを待つブロッキング)は続行できます。
これは機能しているように見えますが、私の質問は次のとおりです。これは安全で推奨される方法ですか?特に、別のスレッドからCFRunLoopStop()を呼び出すと、競合状態が発生する可能性がありますか?私が知る限り、Appleのドキュメンテーションはこの件に関して沈黙している。
メインスレッドからCFRunLoopStop()を呼び出すことが解決策ではない場合、良い解決策は何ですか?子スレッドにCFRunLoopRunInMode()を呼び出して、ブール値などをチェックするために頻繁にウェイクアップさせることができることは知っていますが、回避できる場合は、子スレッドにポーリングを行わせたくありません。