ホームページ  >  記事  >  バックエンド開発  >  C または C で単一インスタンスのアプリケーションを作成する方法: ファイル ロック、ミューテックスなど?

C または C で単一インスタンスのアプリケーションを作成する方法: ファイル ロック、ミューテックスなど?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 16:44:30370ブラウズ

How to Create Single-Instance Applications in C or C  : File Locks, Mutexes, and Beyond?

C または C での単一インスタンス アプリケーションの作成

概要:

それが 1 つだけであることの確認アプリケーションのインスタンスを同時に実行することは、さまざまなシナリオで非常に重要です。この記事では、C または C で単一インスタンスのアプリケーションを実現する方法について説明します。

ファイル ロック:

ファイル ロックは、特定のファイルに適用できます。ロックが取得されると、保持しているプロセスのみがファイルにアクセスできます。これは、アプリケーションの複数のインスタンスが実行されないようにするために使用できます。

<code class="c">#include <sys/file.h>
int fd = open("lockfile", O_RDWR | O_CREAT);
int res = flock(fd, LOCK_EX | LOCK_NB);</code>

ミューテックス:

ミューテックスは同期に使用されます。ミューテックスは単一のスレッドによって取得でき、ミューテックスが解放されるまで他のスレッドが共有リソースにアクセスできなくなります。

<code class="c">#include <pthread.h>
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);
// Critical section
pthread_mutex_unlock(&mutex);</code>

推奨アプローチ:

一般的なアプローチ実行中のアプリケーションのプロセス ID を含むファイルである pidfile を作成することです。 pidfile がすでに存在する場合は、アプリケーションの別のインスタンスが実行中であることを示します。ただし、この方法には pidfile が古いため制限があります。

高度な方法:

より高度な方法には、Unix ドメイン ソケットまたは一意の識別子を使用して、単一の pidfile を確実に使用することが含まれます。実例。 Unix ドメイン ソケットは特定の名前にバインドでき、アプリケーションの最初のインスタンスのみが正常にバインドできます。一意の識別子を生成し、検証のために共有メモリ セグメントに保存できます。

以上がC または C で単一インスタンスのアプリケーションを作成する方法: ファイル ロック、ミューテックスなど?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。