我總是得知,共享內存是在兩個線程之間共享數據的最快方式(例如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