促进线程间通信
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
发送一些消息,接收后将启动线程。或者更一般地说,如果这两个线程独立运行,我该如何处理通信?
有很多方法。
- 使用条件变量(又名事件)
- 使用并发队列(例如消息)或更通用的信号量
- 使用无锁并发数据结构
Boost 提供上述所有功能的实现。
我必须实现增强线程间通信。考虑以下代码:
#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
发送一些消息,接收后将启动线程。或者更一般地说,如果这两个线程独立运行,我该如何处理通信?
有很多方法。
- 使用条件变量(又名事件)
- 使用并发队列(例如消息)或更通用的信号量
- 使用无锁并发数据结构
Boost 提供上述所有功能的实现。