变量的值不会改变外部线程

时间:2014-05-14 17:46:03

标签: c++ multithreading

我对c ++和线程都很陌生,所以这个问题可能是愚蠢的。但是,尽管我已经找了很长时间的解决方案,但我发现关于我的问题的信息很少。问题是我无法在其线程外更改变量的值。我提供的代码段缩短到合理的大小,但我的问题不应该受到影响。

我已经做了许多尝试解决问题的不同行动,但它仍然存在。问题是当我更改from中的变量is_inputdummyf时,它们在主线程中不会更改。我不确定,但我怀疑它与线程写作时发生的其他动作有关。这一定是我想念的东西。我会感谢所有有助于解决问题的输入。

顺便说一下,我知道这可能是我在学习语言之后应该学习的东西,但是在学习了线程之后,许多有趣或激励编程的东西都是可能的。

#include<vector>
#include<string>
#include<iostream>
#include<mutex>
#include<chrono>
#include<thread>

std::mutex m;

void f(std::string& from, bool& is_input, int& dummy){
    if (is_input == false){
        std::cout<<"From"<<"\n";
        std::cin>> from;
        std::unique_lock<std::mutex> lck(m);
        is_input = true;
        std::cout<<"is_input: "<<is_input<<" from "<<from<<std::endl;
        //lck.unlock(); //Should not be needed
    }
    ++dummy;
    std::cout<<"dummy: "<<dummy<<std::endl;
}

int main(){
    std::string from = "";
    bool is_input = false;
    using namespace std::chrono;
    int counter = 0;
    int dummy = 1;
    std::thread th1(f,from, is_input, dummy);
    th1.join();
    while (1)
    {
    ++counter;
    std::this_thread::sleep_for(milliseconds(4000));
    std::cout<<"the thread have slept now, prints is_input and     dummy\n"<<is_input<<"    "<<dummy<<std::endl;
        if (counter == 2){
            break;
         }
    }
    system("PAUSE");
}

0 个答案:

没有答案