1. ホーム
  2. c

[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )

2022-03-09 19:05:37

質問

とは何か違いがあるのでしょうか?

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

または

pthread_mutex_t lock;
pthread_mutex_init ( &lock, NULL);

最初の方法だけで大丈夫ですか?

注意 私の質問は、せいぜい複数のクライアントをサーバーに接続し、ワーカスレッドで問い合わせを解決するような、非常に小さなプログラムについてです。

どのように解決するのですか?

POSIX 標準の古いバージョンでは、イニシャライザを持つ最初のメソッドは静的に割り当てられた変数に対してのみ動作が保証されており、その変数が auto 変数が関数本体で定義されています。私はこれが許されないプラットフォームを見たことがありませんが、たとえ auto この制限は、POSIX標準の最新版では削除されています。

static というのは、ブートストラップコードをより簡単に書くことができるからです。実行時にこのようなミューテックスを使用するコードに入るときはいつでも、ミューテックスが初期化されていることを保証できます。これは、マルチスレッドの文脈では貴重な情報である。

init関数を使用する方法は、例えば再帰的であったり、スレッド間だけでなくプロセス間で共有可能であるなど、ミューテックスに特別な特性が必要な場合に望ましい方法です。