2011-08-13 14 views
18

私はthis articleで、Javaではネストされた同期ブロックが許可されていると読んでいます。私は、Objective-Cの同期ブロックがJavaのように見えることを知っています。 Objective-Cではネストされたブロックが許可されていますか?Objective-Cではネストされた同期ブロックが許可されていますか?

私も副次的な質問があります。再帰的ブロックには実際的な制限はありますか?

迅速な回答ありがとうございました!

答えて

23

はい、そうです。 the docs(現在退役):

Objective-C同期機能は、再帰的なコードと再入可能なコードをサポートします。スレッドは、単一のセマフォを再帰的に複数回使用できます。スレッドが取得したロックをすべて解放するまで、他のスレッドはそのスレッドの使用をブロックされます。つまり、@synchronized()ブロックはすべて正常に終了するか、例外を介して終了します。

この方法とその他の同期/ロック方法のパフォーマンスについては、hereを参照してください。

+0

そのドキュメントのリンクが無効です。ここに、同期ガイドへのリンクがあります。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-124887 – bkbeachlabs

+0

ありがとう@bkbeachlabs。以前のバージョンの旧バージョン/アーカイブバージョンを指すようにリンクを更新しました。私はあなたが "' @同期 'が現在の文書での再入可能な保証であることが分かりません。 – jtbandes