Multithreading 在一个线程中创建承诺并在另一个线程中设置承诺

Multithreading 在一个线程中创建承诺并在另一个线程中设置承诺,multithreading,c++11,promise,boost-thread,Multithreading,C++11,Promise,Boost Thread,我可以在一个线程中创建一个boost::promise,并通过boost::promise::set_value()在另一个不同的线程中设置它的值吗 我想可能是因为这个原因我撞车了,所以我必须猜不,但我需要确认。提前谢谢 注意:我使用的是boost实现。是的,您可以这样做,但是您必须确保对set_value()的调用不会与其他线程中的任何内容冲突,例如构造函数的完成或析构函数的启动 根据C++标准,您甚至无法对 > SETIOVALUE()/SCOD>和 GETSUBULUDE()/CUD>进行

我可以在一个线程中创建一个
boost::promise
,并通过
boost::promise::set_value()
在另一个不同的线程中设置它的值吗

我想可能是因为这个原因我撞车了,所以我必须猜不,但我需要确认。提前谢谢


注意:我使用的是boost实现。

是的,您可以这样做,但是您必须确保对
set_value()
的调用不会与其他线程中的任何内容冲突,例如构造函数的完成或析构函数的启动

根据C++标准,您甚至无法对 > SETIOVALUE()/SCOD>和<代码> GETSUBULUDE()/CUD>进行并发调用,但这是A,应该得到修复。
要给出更精确的答案,必须准确地了解代码在做什么。

@JoachimPileborg承诺应该是线程安全的,
set\u-value
的行为就像它是原子的。@BenjaminGruenbaum,
set\u-value
相对于
set\u-value
(和
set_exception
at_thread_exit
功能)但对于其他成员,如
promise::swap
或析构函数,则不能以原子方式进行。也就是说,可以在一个线程中调用
set\u value
,然后在
set\u value
调用完成之前在另一个线程中调用promise的析构函数(这将是未定义的行为)嗯,我当时还在尝试一些实验。谢谢你的帮助。代码不是特别容易理解。有许多通过作业调度程序从不同线程执行的回调。我会看看我是否可以自己修复它。谢谢你的帮助,这很有帮助。