2017-02-13 6 views
3

function.cでファイルを定義し、main.cでfunction.cでその関数を実行するために複数のpthreadを作成したとします。c - pthreadsのグローバル変数

function.cにグローバル変数、たとえばint fooを定義します。

次に、私の質問は、すべてのスレッドはこの変数 "foo"の独自のインスタンスを持っているのか、それとも単一の "foo"を共有しているのでしょうか?

+0

グローバル変数はすべてのスレッドで共有されます。 – kaylum

答えて

2

これらは単一のfoo変数を共有します。グローバル変数は常にプロセスごとに1回だけ存在し、通常は同時アクセスを避けるためにmutexによって保護されます。

C11ので、あなたは、スレッドごとのローカルとして変数を宣言するthread_local使用することができます。

#include <threads.h> 
... 
thread_local int perThreadInt; 
+0

どうすれば、変数が関数内のローカル静的変数として定義されている場合、各pthreadはこの変数の独自のインスタンスを持ちますか? – zanyman

+0

@RaymondZhang:ローカル静的変数は、可視性が限られているだけで、グローバル変数とほとんど同じです。だから、それはすべてのスレッドでも共有されます。 –

2

グローバルvarはVARです。誰の範囲全体の* .cファイル内の..です彼らは同じファイルで使用どこでも、彼らがすることができづけし...

スレッドがマルチスレッドプロセス(またはマルチスレッドファイル)にlieghtweightプロセスが、 あるすべてのスレッドが一緒に働きます彼らは世界的にグローバル変数にアクセスするように、彼らはないスタンドアロンプロセスだから...、..だから関連プロセスのためのpthreadで定義されて

ローカル変数を を切り抜い-2の機能を提供するには、ローカルづけしていますそれらが宣言されたスレッド

スレッドは、別のスレッドのローカル変数についてはわかりません。

関連する問題