假设我有四个线程,具有以下对象:
线程1:管理一个boost::signals2
对象。调用它s
。
线程 2:管理一个X
对象和对s
. 调用X
对象o2
。成员函数X::do()
连接到s
,要在 上执行o2
。
线程 3:管理一个Y
对象和对s
. 调用Y
对象o3
。成员函数Y::do()
连接到s
,要在 上执行o3
。
线程 4:管理对s
, 和emit
s 信号的引用。
插槽在哪里执行?所有这些都在线程 4 中,emit
调用发生在哪里?在线程 1 上,因为那是信号内存地址的线程?还是每个插槽都在其对应的线程(2 和 3)上执行?
最明显的事情是插槽被执行thread 4
,因为有信号被发出(并且调用是同步的),但对我来说,执行函数的线程似乎很奇怪,或者一般来说,操作一个对象,其内存地址属于另一个线程(例如,在线程的堆上创建的对象,但在不同的线程中使用)。
访问“外来”线程是否至少比操作“我自己的”对象慢,或者根本没有区别?