-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
, которое после получения начнет тему. Или больше Как правило, как я могу обрабатывать связь, если оба эти потока работают независимо?
В одном случае будет реализована глобальная переменная и проверка их в потоке. Как я могу использовать семафор, блокированные очереди в моем существующем коде? – 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/ Тема/synchronization.html # thread.synchronization.condvar_ref). И, объединяя блокированные очереди с семафорами, имеет нулевой смысл. – sehe
«реализация глобальной переменной и проверка их в потоке» - terribru для большинства целей. Редкие случаи для такого общения, например. атомный «AppClosing = true» для всех потоков, которые иногда проверяются, но довольно безнадежный для общих межпоточных комм, где опрос - это трата процессора, пропускной способности памяти и энергии (если только ваш офис не очень холоден). –