对象的 ctor 和 dtor 必须在同一线程上吗?



使用 C++ RAII,当对象超出范围时,将调用 dtor。多线程机制始终涉及传递要在新线程上运行的回调。因此,我认为一个对象不可能在一个线程中构造并在另一个线程中销毁,因为这些必须是不同的范围。

我说的对吗?或者在某些情况下,可以在不同的线程中调用对象 ctor 和 dtor?

因此,我认为一个对象不可能在一个线程中构造并在另一个线程中被破坏,因为这些必须是不同的范围。

我说的对吗?

不。这些函数可以完全独立于任何线程调用。

或者在某些情况下,可以在不同的线程中调用对象 ctor 和 dtor?

当然有案例(只是每天的面包和黄油(。考虑一个简单的生产者/消费者模型和通过队列在线程之间交换的消息实例。

生产者线程创建消息实例并将其推送到队列中。使用者将其从队列中移除,消息析构函数将在处理后被调用。

多线程机制始终涉及传递要在新线程上运行的回调。

假。在很多情况下,您只需要另一个线程在后台执行操作或管理某些内容,但不关心状态。此外,除了回调之外,还有其他信令方法(仅举一个例子是条件变量(。

旁注:可以在任何线程上调用回调,包括将回调传递给的线程。这完全取决于您如何设计系统。您不必在每次调用回调时都创建一个新线程(尽管这是一种方法(。

因此,我认为一个对象不可能在一个线程中构造并在另一个线程中销毁,因为这些必须是不同的范围。

假。共享指针允许指向对象的指针在线程中传递,一旦删除了对对象的所有引用,就会销毁该对象。

例如,一个网络线程构造一个对象来表示从网络接收的某些消息。然后,该线程将该对象放在共享队列中,其他一些处理线程处理该消息。处理线程完成后,它可以销毁对象并释放资源用于其他操作。

相关内容

最新更新