問題タブ [nslock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - NSLockインスタンスは「グローバル」である必要がありますか?
NSLock
すべてのクラスで使用できるように、アプリケーションデリゲートで単一のインスタンスを作成する必要がありますか?または、必要に応じて各クラスに独自のNSLock
インスタンスをインスタンス化させることをお勧めしますか?
たとえば、2つのView Controllerにまたがる管理対象オブジェクトコンテキストにアクセスできる場合、2番目のケースでロックは機能しますか?
iphone - Objective-C 2.0 でのマルチスレッドに関する質問
オブジェクトを返すメソッドを含むメイン アプリケーション デリゲートがあります。このアプリケーション デリゲートは、メイン スレッドで実行されます。
別のスレッドで実行される NSOperation もあります。アプリのデリゲート メソッドをメイン スレッドで呼び出せるようにしたいだけでなく、NSOperation スレッドから呼び出して、返されるオブジェクトを取得する必要もあります。私の最初の質問は、これを他のスレッドから呼び出すかどうかです...
...そのメソッドは NSOperation と同じスレッドで処理されますか、それともアプリケーション デリゲートと同じスレッド (メイン) になりますか?
myMethod
また、内部のコードが、操作スレッドまたはメイン スレッドによって一度に 1 回だけ呼び出されるようにしたいと考えています。アプリケーションデリゲートで NSLock インスタンス変数を作成して、次のようなことを行うことはできますか?
ご協力いただきありがとうございます!
マイク
iphone - _NSLockError()にブレークポイントを設定するにはどうすればよいですか?
複数のスレッドをデバッグしようとしています。
どうすればこれをデバッグできますか?
iphone - [ALAssetsLibrary enumerateGroupsWithTypes:] 使用時の Cocoa スレッド同期
私は最近、[ALAssetsLibrary enumerateGroupsWithTypes]が別のスレッドでそのブロックを実行するのが好きであることを発見しました。Appleがそれを文書化しなかったのはなんと残念なことでしょう:-)
私の現在の状況では、メインスレッドが結果を返す前に、列挙が完了するのを待つ必要があります。ある種のスレッド同期が明らかに必要です。
NSLock と NSConditionLock について読んだことがありますが、「このワーカー スレッドが完了したことをブロックされたスレッドに通知する」という要件を満たすものはまだないようです。それは単純なニーズのように思えます-誰かが私を正しい方向に向けることができますか?
あなたの手がかりとブーイングは、いつものように大歓迎です。
M.
cocoa - NSLock-ロックされたロックをロックするときにブロックする必要がありますか?
私はで始まるループを持っています
ループの本体で、ループが再び実行される前に終了する必要がある別のスレッドを作成しているためです。(他のスレッドは終了時にロックを解除します)。
ただし、2番目のループで次のエラーが発生します。
「ロック」ドキュメントには、次のように記載されています。
要約:ロックを取得しようとし、ロックを取得できるようになるまでスレッドの実行をブロックします。(必要)
ロックを取得できるようになるまでブロックするだけだと思いますか?
multithreading - Cocoa の異なるスレッドからセマフォをロックおよびロック解除する
ミューテックス ゾーンへのアクセスを保護するためにある種のセマフォを使用する必要がありますが、このゾーンは複数のスレッドにまたがる必要があります。これは私がドキュメントで見つけたものです:
警告: NSLock クラスは、POSIX スレッドを使用してロック動作を実装します。ロック解除メッセージを NSLock オブジェクトに送信するときは、最初のロック メッセージを送信したのと同じスレッドからメッセージが送信されていることを確認する必要があります。別のスレッドからロックを解除すると、未定義の動作が発生する可能性があります。
これがプログラミングエラーを防ぐ方法だと読んだことを覚えています。この記述は正しいですか?ドキュメントからスレッド化ガイドを読みましたが、別のスレッドからのロックとロック解除を可能にする他のクラスが見つかりません。これを行うための Cocoa の他のソリューションはありますか? ありがとう!
objective-c - tryLock が成功するまで、ロックされた NSLock で待機する
最初のメソッドは 2 番目のアニメーションを作成し、2 番目のメソッドはいくつかのタスクを実行します。
このクラスは、これら 2 つの操作を連続して実行するために 2 番目のクラスから呼び出されていますが、最初の操作が終了したときにのみ 2 番目の操作が実行されるようにロックを適用したいと考えています。
私の質問は、それを行う最善の方法は何ですか。
ここに私のコードがあります:
そして、それを呼び出すコード:
iphone - ALAssetsLibrary enumerateGroupsWithTypes: - スレッド同期
[ALAssetsLibrary enumerateGroupsWithTypes:] を使用して、ALAssets を配列に格納しています。これは非同期操作であるため、作業を続行する前に完了するのを待つ必要があります。
[ALAssetsLibrary enumerateGroupsWithTypes:] を使用する場合の Cocoa スレッド同期を読み、推奨される NSConditionLock を試しました。ただし、ブロックは常にメイン スレッドで実行されるため、条件ロックを使用して待機すると、メイン スレッドがブロックされ、ブロックが実行されません -> スタックします。メソッド loadAssets を新しいスレッドで実行しようとしましたが、それでもブロックはメイン スレッドで実行されます。
列挙が完了するのを実際に待つ方法が見つかりません。ブロックをメインスレッドとは別のスレッドに強制する方法や、他にできることはありますか?
コードは次のとおりです。
iphone - iOS-ロックの辞書を設定しようとしています
NSStringを入力として受け取り、その文字列を使用してオブジェクトを作成するコードがあります。たとえば、異なるスレッドから呼び出された場合や、同じスレッドが再帰的に実行しようとした場合でも、同じ文字列で2回動作しないようにする必要があります。
初期化されたオブジェクトの辞書を作成し、同じ文字列が再度渡された場合はそのオブジェクトを取得することから始めることができます。しかし、これでも、他のコードがオブジェクトを初期化しているときにオブジェクトが2回要求されたときに何が起こるかという問題が残ります。
AppleがNSLockクラスを提供してくれたようです。私はそれを私の問題にどのように適用するかについて途方に暮れています。Appleが私のロックに名前を付けることを許可しているのを見ますが、指定された名前でロックにアクセスする方法がわかりません。ロックの辞書を作成できると思いますが、それでも防弾ではないようです。2つのスレッドが同時に同じ名前のロックを作成しようとするとどうなりますか?
誰かが私をここで正しい方向に向けることができますか?
objective-c - NSLock「コントローラー」クラス
私は iPhone 用のマルチスレッド アプリケーションを作成しており、NSLock を使用して、一部の操作 (ファイルからサウンドをロードするなど) がアトミックに動作するようにしています。アプリケーションのさまざまな部分から簡単にロックを取得するために、次のクラスを作成しました。これにより、名前を指定して NSString を渡すだけでロックをロックおよびロック解除できます。そのようなロックが存在しない場合は、それを作成して将来のために保存します。私はそれをテストしましたが、うまく動作しているようです (NSLock オブジェクトへのアクセスを提供するだけで、その動作を変更しないため)。
私の質問は、そのようなクラスを持って使用しても大丈夫ですか、それともロックの概念に誤解がありますか?