【发布时间】:2014-02-25 08:28:19
【问题描述】:
我一直都知道,共享内存是在两个线程之间共享数据的最快方式(例如http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html)。但是,今天我发现使用boost::ref(X) 可以为boost 提供对X 的引用,从而可以从线程外部访问X。因此下面的伪代码应该可以工作:
MyObjext X(para1,para2); // MyObject has a () operator
boost::thread thr(boost::ref(X));
X.setSomeMember(1);
这让我想到:假设 setSomeMember 是线程安全的,那么 - 对于大多数应用程序 - 这种方法似乎要容易得多,因为大多数应用程序会根据需要生成它们的线程,因此始终可以保存和访问对象 X。那么,如果我可以直接访问线程对象,为什么还要使用共享内存或消息队列呢?它可能更快吗?还是我在这里遗漏了什么?
【问题讨论】:
-
为了您自己的安全,我建议您阅读更多关于进程内(通常是某种形式的线程)、进程间(同一主机)和进程间(分布式、不同主机)的内容。仅供参考,boost::ref 用于解决完全不同的问题,并且不是线程安全的。
标签: c++ multithreading boost boost-interprocess