1
有沒有辦法啓動兩個(或更多)C++ 11線程和join()完成的第一個線程?C++ 11加入完成的第一個線程
一個示例場景:
#include <iostream>
#include <thread>
using namespace std;
void prepare_item1() {std::cout << "Preparing 1" << std::endl;}
void consume_item1() {std::cout << "Consuming 1" << std::endl;}
void prepare_item2() {std::cout << "Preparing 2" << std::endl;}
void consume_item2() {std::cout << "Consuming 2" << std::endl;}
int main()
{
std::thread t1(prepare_item1);
std::thread t2(prepare_item2);
t1.join();
consume_item1();
t2.join();
consume_item2();
return 0;
}
我也喜歡做這樣的事情,而不是:
int main()
{
std::thread t1(prepare_item1);
std::thread t2(prepare_item2);
finished_id=join_any(t1,t2)
if (finished_id==1)
{
consume_item1();
...
}
else if (finished_id==2)
{
consume_item2();
...
}
return 0;
}
另外,我想解決會阻止,類似於t.join ()函數。
注:我需要這個的真正原因是我有兩個不同的阻塞函數,我從它們接收命令,並且每當它們中的任何一個準備好時,我想處理第一個到達的命令並繼續到下一個命令它完成了。 (來自兩個並行源的命令的順序處理)
謝謝!
我最初會說不,但我確定如果你註冊中斷,你可能會以這種特定的方式做到這一點。 – SGM1
你需要的是'std :: condition_variable' http://en.cppreference.com/w/cpp/thread/condition_variable – arainone
爲了進一步解釋,'std :: condition_variable'會在所有線程間共享。主線程,即你阻塞的線程,將通過首先調用'notify_one'的任何線程(t1或t2)來發信號。 – arainone