function.cでファイルを定義し、main.cでfunction.cでその関数を実行するために複数のpthreadを作成したとします。c - pthreadsのグローバル変数
function.cにグローバル変数、たとえばint fooを定義します。
次に、私の質問は、すべてのスレッドはこの変数 "foo"の独自のインスタンスを持っているのか、それとも単一の "foo"を共有しているのでしょうか?
function.cでファイルを定義し、main.cでfunction.cでその関数を実行するために複数のpthreadを作成したとします。c - pthreadsのグローバル変数
function.cにグローバル変数、たとえばint fooを定義します。
次に、私の質問は、すべてのスレッドはこの変数 "foo"の独自のインスタンスを持っているのか、それとも単一の "foo"を共有しているのでしょうか?
これらは単一のfoo
変数を共有します。グローバル変数は常にプロセスごとに1回だけ存在し、通常は同時アクセスを避けるためにmutexによって保護されます。
C11ので、あなたは、スレッドごとのローカルとして変数を宣言するthread_local使用することができます。
#include <threads.h>
...
thread_local int perThreadInt;
どうすれば、変数が関数内のローカル静的変数として定義されている場合、各pthreadはこの変数の独自のインスタンスを持ちますか? – zanyman
@RaymondZhang:ローカル静的変数は、可視性が限られているだけで、グローバル変数とほとんど同じです。だから、それはすべてのスレッドでも共有されます。 –
グローバルvarはVARです。誰の範囲全体の* .cファイル内の..です彼らは同じファイルで使用どこでも、彼らがすることができづけし...
スレッドがマルチスレッドプロセス(またはマルチスレッドファイル)にlieghtweightプロセスが、 あるすべてのスレッドが一緒に働きます彼らは世界的にグローバル変数にアクセスするように、彼らはないスタンドアロンプロセスだから...、..だから関連プロセスのためのpthreadで定義されて
ローカル変数を を切り抜い-2の機能を提供するには、ローカルづけしていますそれらが宣言されたスレッド
スレッドは、別のスレッドのローカル変数についてはわかりません。
グローバル変数はすべてのスレッドで共有されます。 – kaylum