2017-02-13 6 views
3

Предположим, что я определил функцию в файле function.c и в main.c. Я создаю несколько pthreads для выполнения функции в function.c.c - глобальные переменные в pthreads

Если в функции function.c, я определяю глобальную переменную, например int foo;

Тогда, мой вопрос, имеет ли каждый поток свой экземпляр этой переменной «foo» или они имеют один «foo»?

+0

Глобальные переменные являются общими для всех потоков. – kaylum

ответ

2

Они делят одну переменную foo. Глобальная переменная всегда существует только один раз для каждого процесса и обычно защищена мьютексом, чтобы избежать параллельного доступа.

С C11 вы можете использовать thread_local объявить переменную как локальный для каждого потока:

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

Что делать, если переменная определяется как локальная статическая переменная внутри функции, будет ли каждый pthread иметь свой собственный экземпляр этой переменной? – zanyman

+0

@RaymondZhang: локальная статическая переменная почти такая же, как и глобальная переменная, только с ограниченной видимостью. Таким образом, нет, он будет использоваться всеми потоками. –

2

Global вар является вар. Объем которых в целом * .c файл .. они могут быть там, где они подъезд использовать в одном файле ...

Нити lieghtweight процесс, но в многопоточном процессе (или многопоточном файл) все потоки будут работать вместе обеспечить diffrent-2 функциональности для соответствующего процесса .. таким образом, потому что они не автономных процесса, поэтому они получают доступ к глобальным переменным в глобальной манере ...

локальных переменной, определенных в Pthreads локально в подъезде поток, в котором они объявлены.

Любой поток не знает о локальной переменной другой нити.