【发布时间】:2013-04-28 09:08:31
【问题描述】:
我有一个想要在不同线程中运行的函数。该函数填充一个数据结构,例如:
per_thread(int start_value, std::vector<SomeStruct>& reference)
{
for ( size_t i = 0; i < 500; i++ )
{
reference.push_back(func(i));
if (i == 2)
send_signal_back();
}
}
但是,在循环多次完成后,我想启动另一个线程,使用它作为起始值。不幸的是,我不明白如何将信号发送回父线程。
所以我想要这样的东西:
for( size_t j = 0; j < 5000; j += num_threads)
{
for (size_t i = 0; i < num_threads; i++)
{
std::async(per_thread(foo(j+i), std::ref(vec));
//wait for signal
}
}
如何发送这样的信号?
【问题讨论】:
-
线程之间没有“父子”关系。线程只是线程。也许您在考虑流程?
-
@KerrekSB:没有强制的父子关系,但是一些线程创建了一些其他线程(除了主线程),所以从这个意义上说,存在父子关系。我没有考虑流程,至少据我所知没有。总的来说,我对并发还是很陌生。
-
来点condition variable怎么样?
-
一个(线程安全)消息队列并让主线程定期检查它怎么样?
-
并发是真的很难......无论如何,不,真的没有这种关系,就C++而言。所有的线程实际上只是线程。他们都做同样的事情。确实只有一个线程进入
main,但这并不重要。
标签: c++ c++11 concurrency std