Linux(C / C ++)でプロセス間ロックを実行するには?

Linux(C / C ++)でプロセス間ロックを実行するには?

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

アプリケーションで専用ファイルを生成する方法を見たようですが、これ以上見つかりませんでした。一般的なファイル機能、忙しいループを使用していますか?

答え1

アプリケーションインスタンスを1つだけ実行するには、ロックファイルを使用できます。開いているO_CREAT|O_EXCLファイルがすでに存在する場合は失敗するというフラグが付属しています。

ファイルへのアクセスを同期するには、次のようにします。flock。次のコマンドを使用して一部のファイルをロックすることもできます。fcntl。 Flockはアドバイザリロックにのみ使用されます。つまり、プログラムはロックを無視してとにかくアクセスできます。強制ロックは可能fcntlですが、特別なインストールオプションと特別なファイル権限が必要です。

semgetそしてsemopプロセス間同期にも使用できます。

答え2

プロセス間ミューテックスはPOSIXのオプション部分です(参照:unistd.hの_POSIX_THREAD_PROCESS_SHAREDページ)Linuxで実装されているので使用することもできます。例を見る

関連情報