問題タブ [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.

0 投票する
1 に答える
181 参照

synchronization - スレッド同期用のロックの選択についてヘルプが必要

いくつかの変更スレッドといくつかの読み取りスレッドがあり、それらはすべてグローバル変数 X にアクセスします。同期ポリシーを次のように作成したいと考えています。

スレッドが X を変更しようとすると、最初にロックが必要になり、いくつかの変更スレッドには複数のロックが必要になる場合があります。

スレッドが X を読み取ろうとすると、すべての変更スレッドがロックを解除するまで待機する必要があります。

Linux pthread ライブラリでこの状況に対する解決策はありますか? どうもありがとう

0 投票する
8 に答える
18806 参照

c - C プログラミング: pthread を使用したデバッグ

私が最初に順応するのが最も難しかったことの 1 つは、C で pthreads を使ったプログラミングを初めて経験したときでした。私は、実行されるコードの次の行が何であるかを正確に知ることに慣れており、私のデバッグ手法のほとんどは、その期待に基づいていました。

C で pthreads を使用してデバッグするための優れた手法は何ですか? 追加のツール、使用するツール、またはデバッグに役立つその他のものを使用せずに、個人的な方法論を提案できます。

PS Linuxでgccを使用してCプログラミングを行っていますが、必ずしも答えを制限しないでください

0 投票する
4 に答える
366 参照

c - データベースのトランザクションとスレッド

関数 lock()、unlock()、query1()、query2()、および query3() があります。クエリ関数は、データベースに対して何らかのクエリを実行するだけで、データベースへの r/w アクセスと見なすことができます。ロックしません。私のシステムはマルチスレッドです。

必要な機能は次のとおりです。スレッド p1 から lock() が呼び出された場合、スレッド p1 からのクエリのみが実行され、他のすべてのスレッドからのクエリはロック解除を待ちます。どうすればいいですか?

私は C の pthreads を使用しています。これを行うには、スレッドがロックを保持していることを認識している必要があります。しかし、pthreads にはそのような機能はありません。

設計がおかしい??

編集:

lock() で必要な動作は、スレッドが既にそのロックを保持している場合、ロックを待機しないことです。実行するだけです。問題は、私の lock() 関数が実際にトランザクションを開始することです。トランザクションでたくさんのものを実行したい。そして unlock() はトランザクションを終了します。クエリを連鎖できるようにしたい。1 つの回避策は、doQuery3() の代わりに Function1() で query3() を呼び出すことです。つまり、すべての関数に 2 つのバージョンがあり、1 つはロック付きで、もう 1 つはバニラ query() です。

繰り返しますが、これらのロックおよびロック解除機能は、mutex ロックである場合とそうでない場合があります。pthreadミューテックスで実装しようとしましたが、できませんでした。同じスレッドの pthread_mutex_lock がブロックするためです。クールなトリックはありますか??

0 投票する
6 に答える
8336 参照

c++ - pthread_cond_timedwait および pthread_cond_signal のミューテックスをロックしない (Linux の場合)

関連するミューテックスを最初にロックせずに pthread_cond_timedwait を呼び出すこと、および pthread_cond_signal を呼び出すときにミューテックス ロックを取得しないことの欠点はありますか?

私の場合、チェックする条件は実際にはありません。Javaのwait(long)およびnotify()と非常によく似た動作が必要です。

ドキュメントによると、「予測できないスケジューリング動作」が発生する可能性があります。それが何を意味するのかわかりません。

サンプル プログラムは、最初にミューテックスをロックしなくても問題なく動作するようです。

0 投票する
2 に答える
124 参照

linux-kernel - 2.4 カーネルのマルチスレッド アプリケーションで待機が失敗する

私はマルチスレッド化されたアプリケーションを持っています.1つのスレッドがwait()で死んだ子を収集する責任があり、別のスレッドが要求に応じてフォークでそれらを生成します.

2.4 カーネルと LinuxThread を使用する 1 つのプラットフォームでは、待機が常に ECHILD で失敗することがわかりました。2.4 カーネルでの LinuxThreads の非 POSIX 準拠の実装に問題がある可能性があることがわかりました。以下の説明では、これを解決する方法がないことを示唆しています。

それでも、誰も解決策を知らないことを確認したいと思います。カーネルのパッチでも構いません。

アプリケーションの設計について考えると、fork() と wait() の両方を 1 つのスレッドで (または膨大な労力をかけてのみ) 実行できるとは思えません。

0 投票する
2 に答える
1278 参照

c++ - pthreads スレッドの一意の定数識別子?

pthread_taは、特定のスレッドに対して、その存続期間中一定のままであると推測しましたが、私の実験では、この仮定が間違っていることが証明されているようです。特定のスレッドの ID がその存続期間を通じて一定に保たれない場合、そのスレッドが終了するまで別のスレッドがブロックにpthread_t使用できるようにするにはどうすればよいでしょうか?pthread_join

他の理由から、 に前後に変換できるスレッドの一意の識別子を取得する方法を知っておくと便利ですpthread_t。これを行う方法はありますか?

すばらしい情報がたくさんありますが、これらの質問に対する有用な回答を特定するのに苦労しました. 私が得ることができる助け/アドバイスをいただければ幸いです!

編集: また、理由はわかりませんが、sleep(1) を追加し、すべての新しいスレッドの先頭 (スレッドの関数内) で 1 秒間スリープすると、すべてが期待どおりに機能するようです。これはおそらくストローとして把握していpthread_tますが、新しいスレッドまたは何かの開始時に値が瞬間的に変化する可能性はありますか??

0 投票する
2 に答える
1854 参照

c++ - Solaris10でのpthread_cond_timedwaitリンクエラーとclock_gettime

pthread_cond_wait私はこのように見える使用したコードを少し持っています:

しかし、コンパイル時にリンカーエラーが発生します。

未定義のシンボルclock_gettime...(そのコードを含むファイル)で最初に参照されます

これは私が得る唯一のリンカーエラーです。このコードブロックをコメントアウトすると、コンパイルされるので、pthreadライブラリがロードされます。どこかで-lcフラグを設定する必要があることを読みましたが、これは別の設定も必要なようです。

誰か知っていますか?

これはSolaris10で、Sunの5.8コンパイラを使用しています。

0 投票する
1 に答える
6154 参照

c - ミューテックスを保持したままpthread_cond_broadcastを呼び出しますか?

pthread_cond_tを使用して、ミューテックスを関連付ける必要があります。条件を通知するときに、次のようなコードを確認しました。

どちらが適切な方法ですか?(それは重要ですか?)

0 投票する
8 に答える
45120 参照

linux - Pthread ミューテックス アサーション エラー

Linux ベースの (arm) 通信アプリケーションで、予期しないタイミングで次のエラーが発生します。

Google はそのエラーに関する多くの参照を見つけましたが、私の状況に関連すると思われる情報はほとんどありません。このエラーのトラブルシューティング方法について誰かがアイデアをくれないかと思っていました。この主張の一般的な原因を知っている人はいますか?

前もって感謝します。

0 投票する
6 に答える
6550 参照

c - Windows にはどちらが適していますか? pthreads または CreateMutex?

アプリケーションを Linux から Windows に移植しています。私は、プラットフォーム間でアプリケーションを移植するという芸術にかなり慣れていません。私の知る限り、Windows は POSIX スレッドの実装をネイティブにサポートしていません。これは本当ですか?Windows 用の pthread の実装 (ラッパーなど) について聞いたことがありますが、それらを使用するか、Windows が提供する CreateMutex やその他の API を使用する方がよいでしょうか???? 誰かお願いします。両方の世界の長所と短所を教えてください。移植に関するいくつかのその他のヒントは、答えとうまく調和します。

前もって感謝します。