我正在开发一个 C++ 程序,它有一个“扫描”方法,它将触发一个运行相对较长的扫描过程。当该过程完成时,scan 方法将使用观察者模式通知观察者结果。
我想为每次扫描创建一个单独的线程。这样我可以同时运行多个扫描。当每个扫描过程完成时,我希望 scan 方法通知侦听器。
根据 boost 线程库,看起来我可以做这样的事情:
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <iostream>
boost::mutex io_mutex;
void scan(int scan_target, vector<Listener> listeners)
{
//...run scan
{
boost::mutex::scoped_lock
lock(io_mutex);
std::cout << "finished scan" << endl;
// notify listeners by iterating through the vector
// and calling "notify()
}
}
int main(int argc, char* argv[])
{
vector<Listener> listeners
// create
boost::thread thrd1(
boost::bind(&scan, 1, listeners));
boost::thread thrd2(
boost::bind(&scan, 2, listeners));
//thrd1.join();
//thrd2.join();
return 0;
}
这看起来大致正确吗?我是否需要对侦听器的呼叫进行互斥?可以摆脱连接吗?