2017-02-13 5 views
3

Angenommen, ich habe eine Funktion in der Datei function.c und in main.c definiert. Ich erstelle mehrere Pthreads, um die Funktion in function.c auszuführen.c - globale Variablen in Pthreads

Wenn ich in function.c eine globale Variable definiere, zum Beispiel int foo;

Dann ist meine Frage, hat jeder Thread eine eigene Instanz dieser Variable "foo" oder teilen sie sich ein einziges "foo"?

+0

Globale Variablen werden über alle Threads hinweg geteilt. – kaylum

Antwort

2

Sie teilen sich eine einzige foo Variable. Globale Variable existiert immer nur einmal pro Prozess und ist normalerweise durch Mutex geschützt, um einen gleichzeitigen Zugriff zu vermeiden.

Seit C11 können Sie verwenden thread_local die Variable als lokal pro Thread zu erklären:

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

Was ist, wenn eine Variable als eine lokale statische Variable innerhalb der Funktion definiert ist, wird jeder Pthread eine eigene Instanz dieser Variablen haben? – zanyman

+0

@RaymondZhang: lokale statische Variable ist so ziemlich wie globale Variable, nur mit eingeschränkter Sichtbarkeit. Also nein, es wird auch von allen Threads geteilt. –

2

Global var ist ein var. Dessen Umfang in der gesamten * .c Datei .. können sie zugänglich sein, wo immer sie in derselben Datei verwenden ...

Themen sind lieghtweight Prozess aber in multithreaded Prozess (oder eine Multi-Thread-Datei) alle Fäden zusammenarbeiten diffrent-2-Funktionalität für jeweiligen Prozess zu ermöglichen .. also, weil sie nicht Stand-alone Prozess sind, so dass sie globalen Variable in einer globalen Weise zugreifen ...

Lokale Variablen in pThreads definiert sind lokal zugänglich in der Thread, in dem sie deklariert sind.

Jeder Thread weiß nicht über lokale Variable eines anderen Threads.