這個程式會因為執行緒纏結而崩潰......一個可能正在推動,而另一個正在嘗試擦除。
我怎樣才能使這項作業?
#include <thread>
#include <vector>
using namespace std;
vector<int> v_test;
void push()
{
v_test.push_back(0);
}
void erase()
{
if (v_test.size() > 0)
{
v_test.erase(v_test.begin());
}
}
int main()
{
thread w0(push);
thread w1(erase);
while (true) { Sleep(1000); }
return 0;
}
uj5u.com熱心網友回復:
您需要同步執行緒,以便它們協調對向量的訪問。例如,通過使用std::mutex,例如:
#include <thread>
#include <mutex>
#include <vector>
using namespace std;
vector<int> v_test;
mutex m_sync;
void push()
{
lock_guard<mutex> lock(m_sync);
v_test.push_back(0);
}
void erase()
{
lock_guard<mutex> lock(m_sync);
if (v_test.size() > 0)
{
v_test.erase(v_test.begin());
}
}
int main()
{
thread w0(push);
thread w1(erase);
while(true) {Sleep(1000);}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504214.html
