我对c ++和线程都很陌生,所以这个问题可能是愚蠢的。但是,尽管我已经找了很长时间的解决方案,但我发现关于我的问题的信息很少。问题是我无法在其线程外更改变量的值。我提供的代码段缩短到合理的大小,但我的问题不应该受到影响。
我已经做了许多尝试解决问题的不同行动,但它仍然存在。问题是当我更改from
中的变量is_input
,dummy
和f
时,它们在主线程中不会更改。我不确定,但我怀疑它与线程写作时发生的其他动作有关。这一定是我想念的东西。我会感谢所有有助于解决问题的输入。
顺便说一下,我知道这可能是我在学习语言之后应该学习的东西,但是在学习了线程之后,许多有趣或激励编程的东西都是可能的。
#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");
}