1

コールバック (kauth_unlisten_scope など) の確立/削除とコールバック自体 (xnu コードベースでは、はい、古いことはわかっています) の間に同期がないようです。これにより、コールバックを追跡/排出し、拡張機能自体の呼び出しと同期する負担がかかります。しかし、これは、スレッドがコールバックを終了し、実際に拡張コードから戻ることを通知するウィンドウがあるという点でも問題があります。

このレースを正しく回避するパターンはありますか? または、これが正しく同期されたことを示す Apple からのドキュメントはありますか?

4

1 に答える 1

1

私が知る限り、kauth コールバック登録解除の競合状態を防ぐ 100% 信頼できる方法はありません。API の設計が悪いだけです。Apple 自身が、 Kauth-O-Rama の例で確認できる単純なアトミック カウンター ベースのメカニズムを実装/推奨しています。KauthORama.cソース ファイルgActivationCountで を検索します。インクリメントの前またはコールバックのデクリメントの後にスレッドがコードを実行している可能性はまだ少しありますが、これによるクラッシュは見たことがありません。

于 2016-06-29T08:36:08.570 に答える