私は共有メモリに存在するいくつかの変数へのアクセスを同期させるために使用されるmutexを使用したいと思います。どうすればそれを達成できますか?それを実行するコードサンプルは非常に感謝されます。pthreadsを使用したプロセス間mutex
答えて
代わりに
(下記参照)無名セマフォーには1
に初期化された
POSIX semaphoreを使用してください。
sem_init
、名前付きセマフォーにはsem_open
を使用してください。
sem_t sem;
/* initialize using sem_init or sem_open */
sem_wait(&sem);
/* critical region */
sem_post(&sem);
何年も最初はこの回答を投稿した後、それを更新する必要があります。
セマフォの代わりに実際にミューテックスを使用する必要があります。 Rとkugaのコメント(以下で逐語的にコピー)は理由を説明します。特に私はmutexが詰めることによって最も魅力的であるpost
であることができることをkugaの言及を見つける。
R
sem_initは ミューテックスのpshared属性を必要とするだけのように、共有される非ゼロの引数psharedが必要です。あなたがロックを保持している間に1つのプロセスが死ぬ (非常に実際の)ケースを扱うことを可能にする強固なミューテックスを使用できるので、実際にはmutexesはより良いでしょう: これはミューテックスよりもセマフォを好む理由はありません。
久我
さらにR..`sポストに、ミューテックスは、それをロックしたスレッド によって投稿することができます。これはしばしば必須であり、セマフォはこの機能を に提供しません。これは正解ではないので、正しい回答として にJeffの答えを示す必要があります。
このコードは十分ですか? – MetallicPriest
@MetallicPriestそれでは? – cnicutar
sem_t型の変数は、プロセス間通信のために特別な初期化を必要とします。 – MetallicPriest
次の例は、Pthreadプロセス間ミューテックスの作成、使用、および破棄を示しています。複数のプロセスの例を一般化することは、読者の練習として残されています。
#include <pthread.h>
pthread_mutex_t shm_mutex;
int main(void)
{
int err;
pthread_mutexattr_t attr;
err = pthread_mutexattr_init(&attr); if (err) return err;
err = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); if (err) return err;
err = pthread_mutex_init(&shm_mutex, &attr); if (err) return err;
err = pthread_mutexattr_destroy(&attr); if (err) return err;
err = pthread_mutex_lock(&shm_mutex); if (err) return err;
err = pthread_mutex_unlock(&shm_mutex); if (err) return err;
err = pthread_mutex_destroy(&shm_mutex); if (err) return err;
return 0;
}
- 1. mutexを使用した2つのプロセス間のIPCの調整
- 2. C++ 11プロセス間アトミックとmutex
- 3. pthreadsを使用したセグメンテーションフォルト
- 4. Mutex for Railsプロセス
- 5. プロセス間共有共有mutexを増やし、共有ミューテックスのプロセス間条件変数をブーストする
- 6. mutexを使用してアプリケーション間でメソッドをロックする
- 7. Cプロデューサー/コンシューマー(PThreadsを使用)
- 8. ローカルファイルソケットを使用したPythonとC++間のプロセス間通信?
- 9. メッセージキューを使用したプロセス間でのメッセージの受け渡し
- 10. PThreadsを使用したグローバルリストアクセス - ポインタの問題?
- 11. Laravel DBを使用したPHPのpthreads ORMクエリとの接続
- 12. fortranのpthreadsを使用する
- 13. pthreadsでgprofを使用する
- 14. pthreadsでGstreamerを使用する
- 15. Windowsサービスとフォームアプリケーションの間のソケットを使用したプロセス間通信
- 16. Erlang - ファイル間の転送 - MUTEX
- 17. パイプを使ったプロセス間通信
- 18. pthreadsを使用して送受信をシミュレートします
- 19. pthreadsで作成されたスレッドでTCPDFを使用
- 20. pthreadsを使用したcudaカーネル欠落している構成エラー
- 21. pthreadsを使用して標準入力を確認する
- 22. pthreadsを使用してC++でセグメンテーション違反を取得する
- 23. Clojure core.asyncを使用した調整プロセス
- 24. IdentityServer4を使用したユーザー登録プロセス
- 25. Informaticaを使用した難読化プロセス
- 26. linuxシステムコールウェイトを使用したプロセス待機
- 27. 複数のスレッドとmutexを使用する場合のmutexでのアサーション
- 28. サーバと複数のクライアントpthreadsを使用して
- 29. pthreadsを使用するクラスメンバーとしてのミューテックス
- 30. pthread mutexの使用について
なぜあなたのタイトルは「pthreads」と言うのですが、「プロセス」について質問していますか?とにかくメモリマッピングを使って、プロセス間でどのようにメモリを共有していますか? –
私はフォークする前にメモリを割り当てて共有しています。したがって、1つのプロセスは親プロセスであり、もう1つのプロセスは子プロセスです。 pthreadでは、pthread_mutex_lockの使用を意味していました。 – MetallicPriest
私は 'fork'がメモリの_copies_を作成すると思うので、正確に"共有 "していません。 –