代码之家  ›  专栏  ›  技术社区  ›  jcai

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

  •  3
  • jcai  · 技术社区  · 7 年前

    使用C++RAII,当对象超出范围时调用dtor。多线程机制总是涉及传递回调以在新线程上运行。因此,我认为不可能在一个线程中构造一个对象,在另一个线程中将其破坏,因为它们必须是不同的作用域。

    2 回复  |  直到 7 年前
        1
  •  3
  •   user0042    7 年前

    我说的对吗?

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

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

        2
  •  3
  •   Aerom Xundes    7 年前

    多线程机制总是涉及传递回调以在新线程上运行。

    错误。在很多情况下,你只需要另一个线程在后台做一些事情或管理一些事情,而不关心状态。此外,除了回调之外,还有其他信令方法(只有一个示例是 conditional variables ).

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

    因此,我认为不可能在一个线程中构造一个对象,在另一个线程中将其破坏,因为它们必须是不同的作用域。

    错误。 Shared pointers