vendredi 9 août 2019

Unexpected output from threads

I have 2 threads created using lambdas, Inside of lambda i am calling a my function where i am manipulating my global variables.

I believe when we don't pass values to functions inside thread with keyword std::ref(), it will passed by value even though function parameters are reference variables. But here in my program I expect x, y, z variables to print only 0, 0, 0 as I have not used std::ref to pass variables but it prints 9, 0, 0 sometime and 0, 0, 0 other time. Am i missing something here?

Please find my code below

I have tried executed below program to test my output

#include <stdio.h>
#include <iostream>
#include <thread>

using namespace std;

int x = 0;
int y = 0;
int z = 0;

void func(int& a, int& b)
{
    for (int i = 0; i < 10000; ++i)
    {
        a += i;
        b += i;
    }

}

int main()
{
    std::thread t1([]() {
        func(x, z);

    });
    std::thread t2([]() {
        func(y, z);
    });

    cout << "x,y,z=" << x << " " << y << " " << z << " " << endl;
    t1.join();
    t2.join();
    getchar();
    return 0;
}

Aucun commentaire:

Enregistrer un commentaire