-1
부스트 간 스레드 통신을 구현해야합니다. 다음 코드를 고려하십시오.부스트 인터 스레드 통신
#include <boost/thread/thread.hpp>
#include <Windows.h>
void threadA()
{
while(true)
{
std::cout << "From thread A" << std::endl;
Sleep(3000); //pretend to do the work
}
}
void threadB()
{
while(true)
{
std::cout << "From thread B" << std::endl;
Sleep(3000); //pretend to do the work
}
}
int main()
{
boost::thread *th1 = new boost::thread(&threadA);
boost::thread *th2 = new boost::thread(&threadB);
th1->join();
th2->join();
delete th1;
delete th2;
}
위의 코드를 실행하면 두 스레드가 모두 생성됩니다. 내가하고 싶은 일은 threadA
을 시작하고 메시지를 threadB
에게 보내면받는 즉시 스레드가 시작됩니다. 또는 더 일반적으로,이 두 스레드가 독립적으로 실행되는 경우 어떻게 통신을 처리 할 수 있습니까?
한 가지 방법은 전역 변수를 구현하고 스레드에서 검사하는 것입니다. 기존 코드에서 세마포, lockfree 큐를 어떻게 사용할 수 있습니까? – Pant
어떤 방법 으로든 다른 언어/플랫폼에서 사용할 수 있습니다. 그것들은 실제로 언어에 구애받지 않는 개념입니다. 일부 문서 (http://www.boost.org/doc/libs/1_57_0/doc/html/lockfree.html 또는 http://www.boost.org/doc/libs/1_57_0/doc/html/)를 읽으십시오. thread/synchronization.html # thread.synchronization.condvar_ref). 그리고 lockfree 큐를 세마포어와 결합하면 의미가 없습니다. – sehe
'전역 변수를 구현하고 대다수의 목적을 위해 쓰레드를 검사합니다. 이러한 통신에는 드문 경우가 있습니다 (예 : 모든 스레드가 가끔씩 확인하기 위해 원자적인 'AppClosing = true'이지만, 폴링이 CPU, 메모리 대역폭 및 에너지 낭비 인 일반 스레드 간 통신 (예 : 사무실이 실제로 춥지 않는 한)에 대해서는 절망적입니다. –