問題タブ [mutex]
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++ - pthread を使用して複数のコアを利用する際の問題
SDL と Pthread を使用して C++ でレイ トレーサーを開発しています。プログラムで 2 つのコアを使用する際に問題が発生しています。スレッドは機能しますが、両方のコアを 100% 使用していません。SDL とのインターフェイスとして、SDL_Surface.pixels のメモリに直接書き込むので、SDL によってロックされることはないと思います。
私のスレッド関数は次のようになります。
注: scene->renderPixel は const であるため、両方のスレッドが同じメモリから読み取ることができると想定しています。これを行う2つのワーカースレッドがあり、メインループでこれらを使用して動作させます:
注:スレッドを同期する代わりに、スレッドを作成して参加することも試みました。これを「-lpthread -D_POSIX_PTHREAD_SEMANTICS -pthread」でコンパイルすると、gcc は文句を言いません。
私の問題は、実行中の CPU 使用率のグラフを使用して最もよく説明されています:
(ソース: jopsen.dk )
グラフからわかるように、私のプログラムは一度に 1 つのコアしか使用せず、時々 2 つのコアを切り替えますが、両方を 100% 駆動することはありません。私はいったい何を間違えたのでしょうか?シーンでミューテックスやセマフォを使用していません。バグを見つけるにはどうすればよいですか?
また、scene->renderPixel() の周りに while(true) を配置すると、両方のコアを 100% にプッシュできます。したがって、これはオーバーヘッドが原因ではないかと疑っていますが、複雑なシーンを考えると、0.5 秒ごと (たとえば FPS: 0.5) だけ同期します。私のバグが何であるかを伝えるのは簡単ではないかもしれませんが、これをデバッグするアプローチも素晴らしいでしょう...私は以前にpthreadsで遊んだことがありません...
また、これはハードウェアまたはカーネルの問題である可能性があります。私のカーネルは次のとおりです。
ノート:
java - Java のミューテックスとセマフォとは何ですか? 主な違いは何ですか?
Java のミューテックスとセマフォとは何ですか? 主な違いは何ですか?
c# - Mutexを使用してアプリケーションの単一インスタンスを実行する
実行中のアプリケーションのインスタンスを1つだけ許可するために、mutexを使用しています。コードを以下に示します。これは正しい方法ですか?コードに欠陥はありますか?
ユーザーが2回目にアプリケーションを開こうとしたときに、すでに実行中のアプリケーションを表示する方法。現在(以下のコードで)、別のインスタンスがすでに実行されているというメッセージを表示しています。
java - WeakHashMap.put(..)への二重呼び出しの背後にある理由は何ですか?
このブログ投稿は、文字列IDイディオムごとにミューテックスを実装する方法を示しています。使用される文字列IDは、HttpSessionIDを表すためのものです。
- なぜMutexインスタンスの周りにWeakReferenceをラップする必要があるのですか?文字列->ミューテックスからマップを作成する方が良いのではないですか?
putを2回呼び出す必要があるのはなぜですか?
/li>
c# - スレッドロックされていないミューテックス
これはこの質問から派生したものですが、いくつかの制約が削除されています。
ファイルのロックを管理する必要があるシステムがあります。あるスレッドでファイルをロック (共有読み取りロック) してから、別のスレッドでロックを解除できる必要があります。より正確には、どのスレッドでロックが解除されるか、または作成中のスレッドがまだ存在するかどうかさえわかりません。
これに合わせて排他的な書き込みロックも必要になりますが、それはすべて同じスレッドになります。
.NET Mutexは、作成中のスレッドが終了するときに余分な処理を行うため、機能しません。
c# - 名前付きミューテックスの使用
同じ Windows サービスを実行している 2 つのインスタンスがあります。彼らはお互いの状態をチェックし、問題が見つかった場合は報告します。実行する必要がある重要なジョブがあるため、フェールオーバー アプローチで実行しています。それはマスターで実行され、マスターが応答しない場合はスレーブで実行されます。このジョブは特定のシリアル ポートを介して通信する必要があります。Mutex を使用して競合状態をチェックしようとしています。私は本番環境にアクセスできないので、展開する前に自分のアプローチが問題ないことを確認したいと考えています。そのため、特定のケースで Mutex の使用が適切かどうかを提案してください。
そしてrunJobWrapperで
c - 1 つのスレッドだけが共有変数に書き込む場合、ロックは必要ですか?
2 つのスレッドと共有float
グローバルがあります。1 つのスレッドは変数への書き込みのみを行い、もう 1 つのスレッドは変数からの読み取りのみを行います。この変数へのアクセスをロックする必要がありますか? 言い換えると:
私の主な関心事は、float
アトミックでないのロードまたはストアが、最終的に偽の部分的に更新された値を持つようになることです。local_x
reader_thread
- これは正当な懸念事項ですか?
- ミューテックスなしで原子性を保証する別の方法はありますか?
sig_atomic_t
私の目的に十分なビットがあると仮定すると、共有変数として使用できますか?
問題の言語は、pthreads を使用する C です。
mutex - 「mutex」という単語の複数形
かばん語ミューテックスの正しい複数形は何ですか。それはミューテックスですか、それともミューティスですか?
c++ - OSXでのsem_getvalueセマフォの動作が奇数/正しくない
Linuxでうまく機能する非常に基本的なセマフォコードがいくつかありますが、OSXで正しく実行することはできません...それは奇妙な結果を返します...
これをOSXでg++を使用してコンパイルすると、次の出力が返されます。
一方、Ubuntuでは、明らかにより健全な結果が得られます。
私はこれを3時間続けていますが、OSXがなぜこのような奇妙な結果を返しているのか理解できません...
セマフォ名としてファイルパスを使用してみましたが、違いはありませんでした。
私が得ることができるどんな助けにも感謝します。