在C++中将参数传递给线程
我用的是c++ 我有一个线程函数“my_thread”,它需要以某种方式接收一些对象MyParam作为参数 我不确定如何传递参数的所有权 谁应该负责发布,在哪个阶段发布 我通常做的是:在C++中将参数传递给线程,c++,multithreading,c++11,C++,Multithreading,C++11,我用的是c++ 我有一个线程函数“my_thread”,它需要以某种方式接收一些对象MyParam作为参数 我不确定如何传递参数的所有权 谁应该负责发布,在哪个阶段发布 我通常做的是: MyThread::MyThread(func_to_execute, void* param); void my_thread(MyParam* param) { // Take ownership std::unique_ptr<MyParam> obj(param);
MyThread::MyThread(func_to_execute, void* param);
void my_thread(MyParam* param)
{
// Take ownership
std::unique_ptr<MyParam> obj(param);
...
}
void main()
{
// Create the param. Prepare p
std::unique_ptr<MyParam> p(new MyParam(...));
// Create the new thread
MyThread(my_thread, (void*)param.get());
// If the creation of the thread succeeded (no exception was thrown), Let go of ownership.
(void)param.release();
}
我不能使用std::thread
这段代码假设如果MyThread的ctor没有抛出-线程可能拥有它的参数的所有权
还有其他建议吗?谁负责发布,在哪个阶段发布?->这由你来定义。没有一成不变的规则。是否考虑过让你的线程归某个特定的类所有,并将其作为参数传递给线程函数?这是我实际使用的首选模式之一,在std::shared_ptr中封装它,并使用std::thread,这样可以轻松地传递任意参数。在调用线程中释放p之前,请确保该线程成功获得p的所有权。如果没有MCVE.Moby,很难判断您的代码是否正在这样做-您建议如何做?我尝试的任何方式都容易出现其他失败或竞争