항상 공유 메모리가 두 스레드간에 데이터를 공유하는 가장 빠른 방법이라는 것을 알게되었습니다 (예 : http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess.html). 그러나 오늘 나는 boost::ref(X)
을 사용하여 boost
에 X
에 대한 참조를 제공하여 스레드 외부에서 X
에 액세스 할 수 있음을 발견했습니다. 항상 이렇게 할 수 그들이 필요로하는 대부분의 응용 프로그램은 자신의 스레드를 생성하기 때문에이 방법이 훨씬 쉬워 보인다 - 대부분의 응용 프로그램 - setSomeMember
은 다음 스레드 안전 가정 : 따라서 다음 의사 작동합니다 :프로세스 간 통신 : 공유 메모리와 스레드 개체 액세스
MyObjext X(para1,para2); // MyObject has a() operator
boost::thread thr(boost::ref(X));
X.setSomeMember(1);
을이 날 생각하고 있어요 객체 X
을 저장하고 액세스하십시오. 그렇다면 왜 스레드 객체에 직접 액세스 할 수 있다면 공유 메모리 또는 메시지 대기열을 사용할 수 있습니까? 어쩌면 더 빠를까요? 아니면 여기에 뭔가 빠졌나요?
안전을 위해 내부 프로세스 (일반적으로 어떤 형식의 스레딩), 프로세스 간 (동일한 호스트) 및 프로세스 간 (분산 된, 다른 호스트)에 대해 더 자세히 읽어 보시기 바랍니다. Fyi, boost :: ref는 완전히 다른 문제를 해결하기위한 것으로 스레드로부터 안전하지 않습니다. – aks