問題タブ [semaphore]
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 - セマフォとは?
セマフォは、マルチスレッドの問題を解決するために頻繁に使用されるプログラミングの概念です。コミュニティへの私の質問:
セマフォとは何ですか?また、どのように使用しますか?
operating-system - バイナリセマフォとミューテックスの違い
バイナリセマフォとミューテックスに違いはありますか、それとも本質的に同じですか?
c - pthread_cond_wait とセマフォ
pthread_cond_wait
セマフォの使用または使用の長所/短所は何ですか? 私はこのような状態の変化を待っています:
適切に初期化されたセマフォを使用すると、次のようにできると思います。
各方法の長所と短所は何ですか?
mutex - VxWorks 反転セーフ ミューテックスを使用する場合、なぜ SEM_PRIORITY_Q が必要なのですか?
VxWorks で、SEM_INVERSION_SAFE オプションを使用してミューテックスを作成し、優先順位の逆転の問題を回避しています。
マニュアルには、SEM_PRIORITY_Q オプションも使用する必要があると記載されています。何故ですか?
semaphore - VxWorksは優先度継承をどのように処理しますか?
異なる優先順位で実行されている3つのタスクがあります:A(120)、B(110)、C(100)。Aは、反転セーフフラグを使用してミューテックスセマフォを取得します。タスクBはsemTakeを実行します。これにより、タスクAの優先度が110に引き上げられます。その後、タスクCがsemTakeを実行します。タスクAの優先度は100になりました。
この時点で、Aはセマフォを解放し、Cはそれを取得します。Aの優先度が元の優先度の120に戻らなかったことがわかります。Aの優先度をすぐに復元する必要がありますか?
bash - スクリプトが同時に実行されないようにする方法は?
スクリプトが一度に複数回実行されるのを防ぎたい。
私の現在のアプローチは
- 実行中のプロセスの pid を含むセマフォ ファイルを作成する
- 私のプロセスIDがそこにない場合は、ファイルを読み取ります(あなたは決して知りません...)
- 処理の最後に、ファイルを削除します
プロセスがハングするのを防ぐために、cron ジョブを設定して、ファイルが最大許容実行時間よりも古いかどうかを定期的にチェックし、プロセスがまだ実行されている場合はプロセスを強制終了します。
間違ったプロセスを強制終了するリスクはありますか?
これを全体として実行するためのより良い方法はありますか?
java - CountDownLatch とセマフォ
利用するメリットはありますか
java.util.concurrent.CountdownLatch
それ以外の
java.util.concurrent.Semaphore ?
私が知る限り、次のフラグメントはほぼ同等です。
1.セマフォ
2: カウントダウンラッチ
ただし、#2 の場合はラッチを再利用できず、さらに重要なことに、作成されるスレッドの数を事前に知る必要があります (または、すべてのスレッドが開始されるまで待ってからラッチを作成します)。
では、どのような状況でラッチが望ましいのでしょうか?
c - グローバル構造から読み取るときにセマフォは必要ですか?
かなり基本的な質問ですが、どこにも尋ねられていません。
次のようなグローバル構造体 (C) があるとします。
written_frequently
この構造体への割り当てがアトミックであることを 100% 確信できないため、読み取りと書き込みを行うスレッドが多数ある場合は、メンバーにセマフォ (またはその他のロック) が必要であることは明らかです。.
多くのスレッドにread_only
メンバーを読み取らせ、書き込みを行わせない場合、読み取り専用の構造体アクセスにセマフォが必要ですか?
(直前と直後の場所が常に変更されているという事実がread_only
メンバーに影響を与えるべきではなく、値を読み取る複数のスレッドが互いに干渉するべきではないため、私はノーと言う傾向があります。しかし、よくわかりません. )
[編集: 私が何を意味しているのかを非常に具体的に明確にするために、この質問をもっとうまく行うべきだったことに今気づきました。当然のことながら、最初に質問したとき、関連する問題のすべてを理解できたわけではありません。もちろん、今質問を包括的に編集すると、これらの優れた回答がすべて台無しになります。私が意味したのは、次のようなものです。
私が尋ねた主な問題は、このデータは構造体の一部であるため、他の構造体メンバーの影響を受けているのでしょうか。
メンバーが int であり、したがって書き込みがアトミックである可能性が高いという事実は、この場合、実際には単なるニシンです。]
unix - セマフォの所有権/許可の変更
オプションで呼び出す特別なプログラムを展開せずに、Unix システムのセマフォの所有権とパーミッション マスクをコマンド プロンプトから直接変更する方法はありsemctl
ますIPC_SET
か?
c - ENOSYS で sem_open() が失敗するのを止めるにはどうすればよいですか?
2 つの Slackware Linux システムがあり、POSIX セマフォsem_open()
呼び出しが errno が 38 に設定されて失敗します。サンプル コードを以下に再現します (コードは CentOS / RedHat で正常に動作します)。
これを引き起こす可能性のあるカーネルまたはシステム構成オプションはありますか? 他の提案?
問題のあるシステムは Slackware 10.1.0 カーネル 2.6.11 /lib/librt-2.3.4.so /lib/libpthread-0.10.so ですが、同じコードはずっと古い RedHat 9 カーネル 2.4.20 /lib/librt でも動作します。 -2.3.2.so /lib/tls/libpthread-0.29.so. (CentOS 5 カーネル 2.6.18 /lib/librt-2.5.so /lib/i686/nosegneg/libpthread-2.5.so でも動作します)。
man sem_open
この errno はsem_open()
、システムでサポートされていないことを意味します。
sem_open()
ユーザー空間は動的librt
にリンクする場所librt
であり、影響を受けるシステムに存在します。
影響を受けるシステムは、POSIX セマフォをサポートすると主張しています:_POSIX_SEMAPHORES
は真であり、これをsysconf(_SC_SEMAPHORES)
確認します。
ありがとう、キエラン
編集 1: 使用中のソフトウェア バージョンの詳細を追加し、無関係なコメントを削除しました。
編集 2: /dev/shm は正常なシステムにマウントされ、不良なシステムにはマウントされません。これをマウントしても、影響を受けるシステムの動作は変わりませんでした。/dev/shm も必要だと思いますが、その前に sem_open() が失敗しており、strace がこれをサポートしています。