Files
concurrency-in-action/source/listing_9.13.cpp
2018-10-18 00:40:34 -05:00

36 lines
803 B
C++

std::mutex config_mutex;
std::vector<interruptible_thread> background_threads;
void
background_thread(int disk_id)
{
while (true) {
interruption_point();
fs_change fsc = get_fs_changes(disk_id);
if (fsc.has_changes()) {
update_index(fsc);
}
}
}
void
start_background_processing()
{
background_threads.push_back(interruptible_thread(background_thread, disk_1));
background_threads.push_back(interruptible_thread(background_thread, disk_2));
}
int
main()
{
start_background_processing();
process_gui_until_exit();
std::unique_lock<std::mutex> lk(config_mutex);
for (unsigned i = 0; i < background_threads.size(); ++i) {
background_threads[i].interrupt();
}
for (unsigned i = 0; i < background_threads.size(); ++i) {
background_threads[i].join();
}
}