/* A thread pool (C++ version). */
-/* Copyright (c) 2004-2017 The SimGrid Team.
+/* Copyright (c) 2004-2018 The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
public:
Parmap(unsigned num_workers, e_xbt_parmap_mode_t mode);
Parmap(const Parmap&) = delete;
+ Parmap& operator=(const Parmap&) = delete;
~Parmap();
void apply(void (*fun)(T), const std::vector<T>& data);
boost::optional<T> next();
template <typename T> void Parmap<T>::PosixSynchro::master_wait()
{
xbt_os_mutex_acquire(done_mutex);
- if (this->parmap.thread_counter < this->parmap.num_workers) {
+ while (this->parmap.thread_counter < this->parmap.num_workers) {
/* wait for all workers to be ready */
xbt_os_cond_wait(done_cond, done_mutex);
}
{
xbt_os_mutex_acquire(ready_mutex);
/* wait for more work */
- if (this->parmap.work_round != round) {
+ while (this->parmap.work_round != round) {
xbt_os_cond_wait(ready_cond, ready_mutex);
}
xbt_os_mutex_release(ready_mutex);