#include<iostream>
#include<vector>
#include<thread>
#include<string>
using namespace std;
vector<string> s;
void add()
{
while(true)
{
getchar();
s.push_back("added");
}
}
void show()
{
while(true)
{
//cout<<"";
while(!s.empty())
{
cout<<(*s.begin())<<endl;
s.erase(s.begin());
}
}
}
int main()
{
thread one(add);
thread two(show);
one.join();
two.join();
}
在調試模式下,不存在這樣的問題。在發佈模式下,如果註釋行未註釋,則它會再次運行。但就像這樣,就有一個問題。問題是什麼?在發佈模式下,vector :: empty()函數無法正常工作
您的代碼被破壞,因爲您有兩個線程操縱矢量而沒有同步。使用互斥鎖。 –
但它適用於{cout <<「」;} – sunofkyuss
它看起來可行,但那不可靠。嚴重的是,獲得關於多線程的教程,它會解釋一些事情。 –