在C++中将参数传递给线程

在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);

我用的是c++

我有一个线程函数“my_thread”,它需要以某种方式接收一些对象MyParam作为参数

我不确定如何传递参数的所有权

谁应该负责发布,在哪个阶段发布

我通常做的是:

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,很难判断您的代码是否正在这样做-您建议如何做?我尝试的任何方式都容易出现其他失败或竞争