問題タブ [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.
java - コンシューマーおよびプロデューサーバッファーでセマフォを使用する場合
私はコンシューマーとプロデューサーでBoundedBufferクラスに取り組んでおり、そのクラスでセマフォを使用したいのですが、acquire()を使用するたびにエラーが発生します。エラー は次のとおりです。
報告されていない例外java.lang.InterruptedException; 捕まえるか、投げられると宣言する必要があります
コードは次のとおりです。
ipc - POSIX共有メモリを使用する場合、POSIXセマフォをどこに配置しますか?
POSIX 共有メモリと POSIX セマフォを使用してクライアント サーバー アプリケーションを構築しようとしています。セマフォを共有メモリ セグメント内に配置する必要がありますか?それとも、セマフォを単にグローバル変数にすることができますか? POSIX 規約を遵守したい。
c++ - OSXでのsem_getvalueセマフォの動作が奇数/正しくない
Linuxでうまく機能する非常に基本的なセマフォコードがいくつかありますが、OSXで正しく実行することはできません...それは奇妙な結果を返します...
これをOSXでg++を使用してコンパイルすると、次の出力が返されます。
一方、Ubuntuでは、明らかにより健全な結果が得られます。
私はこれを3時間続けていますが、OSXがなぜこのような奇妙な結果を返しているのか理解できません...
セマフォ名としてファイルパスを使用してみましたが、違いはありませんでした。
私が得ることができるどんな助けにも感謝します。
client-server - 一部の posix 共有メモリ セグメントと posix セマフォが ipcs に表示されないのはなぜですか
pshared=1 の posix 共有メモリと posix の名前のないセマフォを使用して、クライアント サーバー アプリケーションを構築しました。セマフォは共有メモリ内に配置されます。プログラムは正常に実行されますが、ipcs -m または ipcs -s と入力すると、作成した共有メモリ セグメントまたはセマフォが表示されません。なぜそうなのですか?
c# - アプリケーションから1つのインスタンスを実行します
Windowsアプリケーション(C#)があり、一度にアプリケーションから1つのインスタンスを実行するように構成する必要があります。これは、1人のユーザーが.exeファイルをクリックしてアプリケーションが実行され、ユーザーが最初のインスタンスを閉じなかったことを意味します。実行中のアプリケーションの次のインスタンスを実行する必要があるため、最初のインスタンスが表示され、新しいインスタンスは開かないはずです。
誰かが私にそれをする方法を手伝ってくれる?
前もって感謝します
perl - Perl のプロセス間ミューテックス
mod_perl で実行する Perl CGI プログラムがあります。プログラム内で、リソースが複数のプロセスから同時にアクセスされないようにしたいと考えています。
問題は :
- 同じプロセスまたは他のプロセスによって 10023 ID が以前に作成されたことがない場合にのみ、Code(1) に新しいセマフォを作成させるにはどうすればよいですか?
- ID が 10023 のセマフォを初めて作成するときにのみ Code(2) を実行するにはどうすればよいですか? セマフォは 1 回だけ初期化されます。
もう 1 つの方法は、ロック用に空のファイルを作成することです。ただし、これにより、最終的に何千もの一時ファイルが作成されます。 リンクテキスト
unix - semget が「許可が拒否されました」で失敗する
P1 と P2 の 2 つのプロセスがあります。P1 はルートとして実行されており、次の呼び出しでセマフォを作成しています。
semget (キー、1、S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);
通常のユーザーのコンテキストで実行されている別のプロセス P2 で同じセマフォへのハンドルを取得しようとしています。このプロセスでは、semget 呼び出しは成功しますが、semop 呼び出しは「アクセス許可が拒否されました」(Errno = 13) で失敗します。
どんなポインタでも大いに役立ちます。
~ps7
c - セマフォ操作を待機しているスレッドを終了するにはどうすればよいですか
ipc に共有メモリとセマフォを使用するプログラムを作成しています。共有メモリとセマフォを作成するメイン サーバー プロセスが 1 つあります。クライアント プロセスはいくつでも共有メモリにアタッチでき、許可されている場合は読み書きできます。セマフォは、読み取りと書き込みを制御するブロッキング メカニズムを提供します。クライアントを終了しようとする場合を除いて、すべて正常に動作します。共有メモリにアクセスするためのセマフォ ブロックはスレッド内にあり、プロセスの終了時にセマフォ ブロックを解放する方法がないため、スレッドは正しく終了します。これについてどうすればいいですか?これは Linux 用です。
具体的には、1 つの shm と 2 つの sem があります。最初の sem は書き込みをブロックし、2 番目のブロックは読み取りをブロックします。クライアントが何かを書き込む場合、クライアントは write sem が 0 になるのを待ってから、それを 1 に設定し、書き込み、次に read sem を 0 に設定します。これにより、待機しているサーバーが解放され、クライアントが書き込んだ内容が読み取られます。読み取りが完了すると、サーバーは書き込み sem を 0 に戻し、次のクライアントが書き込みを開始します。read sem が 0 のときに解放される semop 呼び出しでハングします。この semop 呼び出しはスレッド内にあり、メイン スレッドを終了させる前にそのスレッドを正しく終了する方法を理解する必要があります。
これは私がやりたいことの例ですが、機能していません (スリープはぶら下がっている semop 呼び出しのふりをしています):
windows - Windowsでセマフォ値が0になるまで待機/ブロックする方法
UNIX で semop() 関数を使用すると、sem_op =0 の sembuf 構造体を提供できます。基本的に、これは呼び出しプロセスがセマフォの値がゼロになるまで待機/ブロックすることを意味します。Windowsでこれを達成する同等の方法はありますか?
私が実装しようとしている特定の使用例は、ライターに書き込みを許可する前に、リーダーの数がゼロになるまで待機することです。(はい、これはセマフォを使用するやや非正統的な方法です。これは、リーダーの数に制限がなく、セマフォが通常管理するために使用される一連の制約されたリソースがないためです)
unix semop システム コールに関するドキュメントは、http: //codeidol.com/unix/advanced-programming-in-unix/Interprocess-Communication/-15.8.-Semaphores/にあります。