2015-01-05 1 views
-1

Мне нужно внедрить ускоренную межпоточную связь. Рассмотрим следующий код:Boost Interthread Communication

#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, которое после получения начнет тему. Или больше Как правило, как я могу обрабатывать связь, если оба эти потока работают независимо?

ответ

4

Существует много способов.

  • использование переменного условия (ака. Событие)
  • использовать параллельную очередь (сообщения, например) или в более общем плане, семафоры
  • использования lockfree структуры параллельных данные

подталкивания обеспечивает реализацию все вышеперечисленное.

+0

В одном случае будет реализована глобальная переменная и проверка их в потоке. Как я могу использовать семафор, блокированные очереди в моем существующем коде? – Pant

+0

В любом случае вы использовали бы их на других языках/платформах. Это действительно языковые агностические концепции. Просто прочитайте несколько документов (http://www.boost.org/doc/libs/1_57_0/doc/html/lockfree.html или http://www.boost.org/doc/libs/1_57_0/doc/html/ Тема/synchronization.html # thread.synchronization.condvar_ref). И, объединяя блокированные очереди с семафорами, имеет нулевой смысл. – sehe

+0

«реализация глобальной переменной и проверка их в потоке» - terribru для большинства целей. Редкие случаи для такого общения, например. атомный «AppClosing = true» для всех потоков, которые иногда проверяются, но довольно безнадежный для общих межпоточных комм, где опрос - это трата процессора, пропускной способности памяти и энергии (если только ваш офис не очень холоден). –