lundi 1 mars 2021

thread_local in C++ 11 isn't consistent

Why the output isn't consistently 1 , when I declared Counter object as thread_local

#include <iostream>
#include <thread>
#define MAX 10

class Counter {
    int c;
    public:
    Counter() : c(0) {}
    void increment() {
        ++c;
    }
    ~Counter() {   
        std::cout << "Thread " << std::this_thread::get_id() << " having counter value " << c << "\n";  
    }
};

thread_local Counter c;

void doWork() {
    c.increment();
}

int main() {
    std::thread t[MAX];
    for ( int i = 0; i < MAX; i++ )
        t[i] = std::thread(doWork);
    for ( int i = 0; i < MAX; i++ )
        t[i].join();    
    return 0;
}

Output :

Thread 2 having counter value 19469616 Thread 3 having counter value 1 Thread 4 having counter value 19464528 Thread 5 having counter value 19464528 Thread 7 having counter value 1 Thread 6 having counter value 1 Thread 8 having counter value 1 Thread 9 having counter value 1 Thread 10 having counter value 1 Thread 11 having counter value 1

Aucun commentaire:

Enregistrer un commentaire