問題タブ [pthreads]
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.
multithreading - MSVC / Windowsの「pthread_rwlock_timedrdlock()」および「pthread_rwlock_timedwrlock()」に相当します
Windows(MSVC)でPOSIXタイミングリーダー/ライターロックを実行するのと同じことは何ですか?
- pthread_rwlock_timedrdlock()
- pthread_rwlock_timedwrlock()
c++ - PThreadは、マルチプラットフォームC / C ++マルチスレッドプログラムに適していますか?
過去5年間、主にJavaと.NETの断片化を行っており、その間、重要なCまたはC++を記述していません。だからしばらくの間そのシーンから離れていた。
マルチスレッドを実行し、Windows、Mac OS X、およびLinux / Unix間でソースコードを移植できるCまたはC++プログラムを今日作成したい場合、PThreadは良い選択ですか?
CまたはC++コードはGUIを実行しないため、そのいずれについても心配する必要はありません。
ただし、Windowsプラットフォームの場合、UNIXエミュレーションランタイムライブラリの観点から、多くのUnixの手荷物を持ち込みたくありません。既存のWindowsスレッドAPIよりも可能な限り薄いラッパーであるWindows用のPThreadAPIを優先します。
補遺編集:
boost:threadを使用する傾向があります-C++のtry/catch例外処理も使用できるようにしたいと考えています。そして、私のプログラムはかなり最小限で、特にOOPishではありませんが、Cの非実体化された関数ではなく、クラスと名前空間を使用してカプセル化するのが好きです。
pthreads - pthread 条件変数
タスクのキューを持つスレッドを実装しています。最初のタスクがキューに追加されるとすぐに、スレッドが実行を開始します。
スレッドをウェイクアップするために pthread 条件変数を使用する必要がありますか、それともより適切なメカニズムがありますか?
pthread_cond_signal()
他のスレッドがブロックされているのpthread_cond_wait()
ではなく、何かを実行しているときに呼び出すと、どうなりますか? 信号が失われますか?
c - このデッドロックはどこに隠れているのでしょうか?
私は実際にMPIプログラムを書いています。これは基本的なクライアント/サーバー パターンです。サーバーには、計算する一連の作業があります。クライアントは、この大きなセットのサブセットを取得します。各クライアントは、いくつかのスレッドを使用してサブセットを計算します。サーバーに別のサブセットを要求する前に、すべてのスレッドが終了していることを確認する必要があります。
クライアントは、マスター (通信用) と複数のワーカーの複数のスレッドに分割されます。
ここで、デッドロックが発生するはずの実際のコードを示します。読みやすくするために、MPI 呼び出しを削除しました。ここで何が間違っているのか本当にわかりません。
c++ - スレッドセーフキューに問題がありますか?
C++でpthreadを使用してスレッドセーフなキューを作成しようとしています。私のプログラムは93%の時間で動作します。他の7%の時間は、他の人がゴミを吐き出している、または眠りに落ちているようです。コンテキストスイッチがそれを壊すであろう私のキューにいくつかの欠陥があるかどうか疑問に思っていますか?
これは次のように使用できます。
誰かがこれに問題を見つけたら、そう言ってください:)
c - C : pthread データ固有の仕組みは?
pthread dataspecific がどのように機能するかはわかりません。次のコード (Web で見つかります) を考慮すると、これは、たとえばメインで 5 つのスレッドを作成し、それらの一部だけで func を呼び出すことができることを意味します (2 としましょう) ) これらのスレッドは、データの「キー」を何かに設定し (ptr = malloc(OBJECT_SIZE) )、他のスレッドには同じキーが存在しますが、NULL 値がありますか?
dataspecific がどのように機能するか、および pthread でどのように実装されているか (簡単な方法) についての説明をいただければ幸いです。
c - 任意のpthread_tからスレッドIDを取得するにはどうすればよいですか?
pthread_tがあり、CPUアフィニティを変更したいと思います。問題は、 pthread_setaffinity_np()がないglibc2.3.2を使用していることです。ただし、pthread_setaffinity_np()自体がsched_setaffinity()のラッパーであるため、これは問題ありません。これは、プロセスIDの代わりにスレッドIDを渡して、任意のスレッドのアフィニティを設定することで呼び出すことができます。
しかし... sched_setaffinityが使用できるスレッドIDはOSスレッドIDであり、 gettid()システムコールから取得できる種類です。これは不透明(OPAQUE)型のpthread_tとは異なり、gettid()は現在のスレッドのthread-idのみを返します。任意のスレッドのCPUアフィニティを設定できる必要があります。
残念ながら、pthreadのプライベート部分にアクセスできません。そのため、pthread_tをにキャストしてスレッドIDを盗むことができますstruct pthread *
。プライベートな実装に依存することはさらに多くの問題を求めているので、さらに良いと思います。
私もpthread_getunique_np関数を読んでいますが、これは「一意の整数識別子」を返します。これは、OSスレッドIDと同等の形や形式ではないと思います。
したがって、質問:任意のpthread_tからスレッドIDを取得するにはどうすればよいですか?
multithreading - pthreads - ジョブを並列化する方法
n プロセッサ システムで使用するために、単純なパスワード クラッカーを並列化する必要があります。私の考えは、n個のスレッドを作成し、それらが終了するにつれて、それらにますます多くの仕事を与えることです。
スレッドがいつ終了したかを知る最良の方法は何ですか? ミューテックス?他のスレッドが実行されている間、このミューテックスを常にチェックするのは高価ではありませんか?