C ++: Wie man eine lokale / globale Variable des Threads erstellt

8

in diesem Code:

%Vor%

ist die x global für alle Threads oder lokal in jedem Thread? Oder hängt das von einem Compiler-Flag und / oder dem Compiler ab, so dass ich nicht wirklich wissen kann, was es aus dem Code ist?

Mehrere Fragen (alle unabhängig von Compiler und Compilerflags und OS):

  1. Wie kann ich eine statische Variable erstellen, die für alle Threads global ist?
  2. Wie kann ich eine statische Variable erstellen, die für jeden Thread lokal ist?
  3. Wie kann ich eine globale Variable erstellen, die für alle Threads global ist?
  4. Wie kann ich eine globale Variable erstellen, die für jeden Thread lokal ist?

Ich nehme an, dass dies nicht in C ++ selbst ist. (Ist es in C ++ 0x?) Irgendeine Boost-Lib, die das kann?

    
Albert 03.09.2010, 15:34
quelle

3 Antworten

6

x ist global für alle Threads. Immer, unabhängig vom Compiler und / oder seinen Flags. Unabhängig davon, ob dies in C ++ 11 oder C ++ 03 ist. Wenn Sie also eine reguläre globale oder statische lokale Variable deklarieren, wird diese zwischen allen Threads geteilt. In C ++ 11 haben wir das Schlüsselwort thread_local . Bis dahin können Sie thread_specific_ptr von Boost.Thread verwenden.

    
usta 03.09.2010, 15:47
quelle
1

Schnelle Teilantworten;

  

(Ist es in C ++ 0x?)

Ja. Aber hängt auch von der C ++ 0x-Unterstützung Ihres Compilers ab.

  

Irgendeine Boost-Lib, die das kann?

Boost.Threads . Siehe lokalen Speicher fädeln ein.

  
  1. Wie kann ich eine statische Variable erstellen, die für alle global ist?   Threads?
  2.   
  3. Wie kann ich eine statische Variable erstellen, die für jede lokal ist?   Thread?
  4.   
  5. Wie kann ich eine globale Variable erstellen, die für alle global ist?   Threads?
  6.   
  7. Wie kann ich eine globale Variable erstellen, die für jede lokal ist?   Thread?
  8.   

Beachten Sie, dass sich "statisch" normalerweise auf "Dauer" und "global" auf "Umfang" bezieht.

C ++ 0x-Thread-Konstruktoren sind variadisch: Sie können eine beliebige Anzahl (und einen Typ) von Argumenten übergeben. Alle diese sind für Ihr std::thread -Objekt verfügbar.

%Vor%     
dirkgently 03.09.2010 15:41
quelle
1

Sie müssten eine Art plattformübergreifende Threading-Bibliothek verwenden (da Sie die Betriebssystemunabhängigkeit erwähnt haben), aber pthreads können Sie verwenden.

%Vor%

Ich bin sicher, dass der Code Fehler enthält und als Pseudocode behandelt werden sollte, da ich ein Pseudo-Programmierer bin, wenn es um C ++ geht. :)

    
Novikov 03.09.2010 16:12
quelle