問題タブ [scoped-lock]
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.
c++ - scoped_lock をブーストします。これはロックしますか?
解決した
bfs::directory_iterator キューを std::string キューに変更したところ、驚くべきことに問題が解決しました。
こんにちは、私は自分が間違ったことをしているという直感を持っています。
スレッド プール パターンを実装しました (または試みました)。
N 個のスレッドがキューから読み取られましたが、問題が発生しています。これが私が得たものです:
scoped_lock は引き続き if の本体内で機能しますか? 私はそれがないと信じ始めています(多くのテストを実行した後)。そうでない場合、これを行うスコープ付きの方法はありますか(つまり、明示的なロック解除方法ではありません)
前もって感謝します。
アップデート
要素をキューに追加するコードは次のようになります
ポップされたファイル名を制御するために cout を配置します。2 つのファイル (file1) と (file2) をプッシュし、2 つのスレッドを使用すると、両方の "file2" が取得されます。
c++ - scoped_lock の間違った使い方によるメモリリーク?
メモリ リークが発生しました。これは、scoped_lock (Boost) の使用方法が間違っていることが原因だと思います。ただし、正確な問題を見つけることはできません。また、コードの記述方法も完全に正しくないと思います。
コードはこのクラスにあります: http://taf.codeplex.com/SourceControl/changeset/view/31767#511225
主な重要なメソッドは ThreadedLoop() です。基本的に、このメソッドはスレッド内で開始され、Yahoo 用にダウンロードされる市場データを定期的にチェックします。株式ごとに (またはそれ以外の場合)、新しいスレッドが作成され (ExecuteNextRequest() メソッド用に)、株式名を含む文字列へのポインターをパラメーターとして渡します。これは私が行う唯一のメモリ割り当てですが、スレッド実行の最後に解放されます。
また、このコードをどのように拡張できるかにも興味があります (もちろん、スレッドプールを使用することもできますが、それはまだ重要ではありません)。どうもありがとう!
c++ - ブースト::recursive_mutex:: scoped_locksデストラクタはロック解除されたミューテックスを参照しますか?
を呼び出しunlock()
た後boost::recursive_mutex::scoped_lock
、ロックオブジェクトはデストラクタで何らかの形でミューテックスを参照しますか?
ロックは、ロック解除の呼び出し後もミューテックスへの参照を保持します(つまりmutex()
、同じポインターを返します)。release()
ロックがスコープ外になる前にミューテックスが破壊された場合にも、ロックで呼び出す必要がありますか?
c++ - boost::interprocess::scoped_lock アプリケーションがロック内でクラッシュする
私はboost::interprocess::scoped_lockを使用しています。アプリケーションが何らかの理由でスコープ内でクラッシュした場合、ミューテックスは解放されません。次にアプリケーションが実行されると (コンピューターを再起動せずに)、ミューテックスがロックされます。
これはどのように機能することを意図していますか?以下にコードの簡単な例を示します。
以下のようなタイムアウトをしてしまいました。ロックの時間を制限しない解決策を思い付くことができる人はいますか?
c++ - boost::scoped_lock を返す関数 (またはマクロ) を探す
コード短縮のアイデアを探しています。boost::scoped_lock
をロックするために使用していますboost::mutex
が、記述しているコードの量を短縮したいと考えています。
現在mutex
、クラスで が定義されており、メンバー フィールドは と呼ばれて_sync
います。ロックしたいときは、次のように書く必要があります。
注意が必要な部分は、これがスコープ付きロックであることです。そのため、scoped_lock を返す静的関数を作成すると、静的関数の関数スコープから出るとすぐにロックが解除されると仮定します。
このアプローチにより、入力が非常に簡単になります。
私の仮定は正しいですか?scoped_lock
静的関数によって返されたときにすぐにロックを解除しますか?
multithreading - Boost ::スレッド、過剰、データ共有
プログラムに問題があると思います。外部の追跡システムと継続的に通信し、そこからポイントの座標を取得するオブジェクトを作成する必要があります。このクラスをboost::thread内にラップし、Glutアプリケーションを最初に呼び出す前に、スレッドオブジェクトを作成してデタッチします。
クラスの顕著なメソッドのコードは次のとおりです
私のglutTimerFuncは、すべてのフレームがメソッドgetAllPointsを使用してポイントを選択する更新関数を呼び出しますが、トラッカースレッドはそれらを継続的に更新します(実際、データへのアクセスの頻度は異なりますが、スレッドの呼び出しはglut更新関数よりも高速です呼び出します。
プログラムが終了すると、最初にnewで割り当てられたTrackerオブジェクトを削除してから、それを含むスレッドを中断しますが、メモリリークであると思われる奇妙な動作が発生することがあります。
さまざまなアクセス頻度とscoped_lockの使用でデータを取得する方法は正しいですか、それともgetAllPointsメソッドに何らかの注意を払う必要がありますか?
c++ - 「ネストされた」scoped_lock
私の短縮された単純化されたクラスは次のようになります。
へのアクセスを同期したいと思いますm_myVar
。を呼び出すA::methodB()
と、スレッドは同じミューテックスで2回ロックに遭遇し、明らかに最初の行でブロックしますA::methodA()
再度渡すときに同じスレッドscoped_lock
をブロックしないようにする方法はありますか?
もちろん、私は単純に を呼び出すことができますm_mutex.unlock()
。しかし、これにより、ロックを待機している他のスレッドも解放されます。これは、私が望んでいることではありません。
何か案が?
宜しくお願いします トバイアス
c++ - boost :: signal2::mutexとboost::thread :: mutexの違いは何ですか?
別のSO質問に投稿されたバージョンのBlockingQueueを使用scoped_lock
しmutex
て実装していますが、ブーストでは両方に複数の異なるプリコンパイル済みヘッダーがあります。
scoped_lock
「boost/interprocessor / sync/scoped_lock.hpp」および「boost/thread/mutex.hpp」から入手できます。
mutex
「boost/thread / mutex.hpp」、「boost / signal2 / mutex.hpp」、「boost / thread / win32/mutex.hpp」から入手できます。
「win32/mutex.hpp」はどういうわけかWindows用に最適化されていると思いますが、他のものはどうでしょうか。それらの違いは何ですか?
c++ - スコープ付きロックの前にオプションのミューテックスをチェックする
オプションで、ユーザーがポンターを Boost ミューテックスに渡すことを可能にするコンストラクターがあります。ミューテックスが指定されていない場合、メンバー ポインターpMyMutex
は に設定されNULL
ます。これにより、ユーザーは必要に応じてスレッド セーフを適用することができます。ただし、scoped_lock
明らかな理由から、この種のチェックでは a を使用できません:)
そのような要件に対するきちんとした簡単な解決策を提案できる人はいますか?
c++ - boost-threads: scoped_lock を呼び出し先に渡すにはどうすればよいですか?
ブーストスレッドライブラリは初めてです。ある関数で取得scoped_lock
し、呼び出し先でそれを待機する必要がある状況があります。
コードは次の行にあります。
基本的に、 functiond()
では、取得したスコープ付きロックにアクセスしてa()
待機できるようにする必要があります。それ、どうやったら出来るの ?(他のスレッドが通知します)。
または、ロックの代わりにミューテックスを直接待つことはできますか?
どんな助けでも大歓迎です。ありがとう !