我有一个程序,其中有一个函数需要接收指针作为参数,还有一个主函数。主函数创建n个线程,每个线程在不同的内存区域上运行函数,具体取决于传递的
为了改进程序,我想让线程保持活动状态,消除创建线程所需的长时间。当主函数工作时,线程应处于休眠状态,并在需要再次启动时得到通知。同样地,当线程正在工作时,主函数应等待它们完成,就像使用join一样。
我无法得到一个强大的实现,总是陷入死锁中。
这是一个简单的基准代码,希望能提供修改的提示。
arg
。然后等待所有线程完成,主函数对这些区域进行一些数据混合,并创建n个新线程,这些线程执行与旧线程相同的操作。为了改进程序,我想让线程保持活动状态,消除创建线程所需的长时间。当主函数工作时,线程应处于休眠状态,并在需要再次启动时得到通知。同样地,当线程正在工作时,主函数应等待它们完成,就像使用join一样。
我无法得到一个强大的实现,总是陷入死锁中。
这是一个简单的基准代码,希望能提供修改的提示。
#include <thread>
#include <climits>
...
void myfunc(void * p) {
do_something(p);
}
int main(){
void * myp[n_threads] {a_location, another_location,...};
std::thread mythread[n_threads];
for (unsigned long int j=0; j < ULONG_MAX; j++) {
for (unsigned int i=0; i < n_threads; i++) {
mythread[i] = std::thread(myfunc, myp[i]);
}
for (unsigned int i=0; i < n_threads; i++) {
mythread[i].join();
}
mix_data(myp);
}
return 0;
}