我总是得知,共享内存是在两个线程之间共享数据的最快方式(例如http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html)。但是,今天我发现使用boost::ref(X)
可以给boost
提供X
,从而允许从线程外部访问X
。因此下面的伪代码应该工作:进程间通信:共享内存vs线程对象访问
MyObjext X(para1,para2); // MyObject has a() operator
boost::thread thr(boost::ref(X));
X.setSomeMember(1);
这让我思考:假设setSomeMember
是线程安全的,那么 - 对于大多数应用 - 这种方法似乎容易得多,因为大多数应用程序会衍生它们的线程,因为他们需要,因而总能保存并访问对象X
。那么,为什么我会直接使用共享内存或消息队列?它可能更快?或者我在这里错过了什么?
为了您自己的安全,我建议您阅读关于进程内(通常是某种形式的线程),进程间(相同主机)和进程间(分布式,不同主机)的更多信息。 Fyi,boost :: ref用于解决完全不同的问题,而且不是线程安全的。 – aks