web-dev-qa-db-ja.com

Linux(C / C ++)でクロスプロセスロックを行う方法を教えてください。

1つのプロセスが一度に1つのインスタンスでのみ実行されることを確認する必要があります。 Windowsでは、名前付きミューテックスを使用できます。しかし、私はLinuxで何を使うべきか分かりません。

アプリが専用ファイルを作成するというアプローチを見たと思いますが、それを見つけることができません。通常のファイル機能、ビジーループを使用していますか?

8
Coder

アプリのインスタンスを1つだけ実行したい場合は、ロックファイルを使用できます。 OpenO_CREAT|O_EXCLフラグ付きで、ファイルがすでに存在する場合は失敗します。

ファイルへのアクセスを同期したい場合は flock を使用します。 fcntl でファイルの一部をロックすることもできます。 Flockはアドバイザリロック専用です。つまり、プログラムはロックを無視してアクセスできます。必須ロックはfcntlで可能ですが、特別なマウントオプションと特別なファイル権限が必要です。

semget および semop は、プロセス間同期にも使用できます。

8
stribika

プロセス間mutexはPOSIXのオプションの部分であり(unistd.hの _ POSIX_THREAD_PROCESS_SHAREDを参照してください ページ)、Linuxに実装されているため、それらも使用できます 例を参照

0
Milan Kerslager