Я разрабатываю программу на C++, которая имеет метод «сканирования», который будет запускать относительно длительную процедуру сканирования. Когда процедура будет завершена, метод сканирования уведомит наблюдателей о результатах с использованием шаблона наблюдателя.Резьбовая реализация шаблона наблюдателя - C++
Я хотел бы создать отдельный поток для каждого сканирования. Таким образом, я могу запускать несколько сканирований одновременно. Когда каждый процесс сканирования завершается, я хотел бы, чтобы метод сканирования уведомлял слушателей.
Согласно библиотеки потоков буст, это выглядит, как я могу, возможно, сделать что-то вроде этого:
#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;
}
ли это выглядеть примерно правильно? Нужно ли мне mutex-вызов для прослушивания? Можно ли избавиться от объединений?
Что вы пытаетесь защитить с помощью мьютекса? Список слушателей? Вы пытаетесь предотвратить перекрытие итераций через список? – DanM