Promise::Promise(const ModelExecution *execution, ModelAction *read, struct future_value fv) :
execution(execution),
num_available_threads(0),
+ num_was_available_threads(0),
fv(fv),
readers(1, read),
write(NULL)
available_thread[id] = true;
num_available_threads++;
}
+ if (id >= was_available_thread.size())
+ was_available_thread.resize(id + 1, false);
+ if (!was_available_thread[id]) {
+ was_available_thread[id] = true;
+ num_was_available_threads++;
+ }
}
/**
return available_thread[id];
}
+bool Promise::thread_was_available(thread_id_t tid) const
+{
+ unsigned int id = id_to_int(tid);
+ if (id >= was_available_thread.size())
+ return false;
+ return was_available_thread[id];
+}
+
+/**
+ * @brief Get an upper bound on the number of available threads
+ *
+ * Gets an upper bound on the number of threads in the available threads set,
+ * useful for iterating over "thread_is_available()".
+ *
+ * @return The upper bound
+ */
+unsigned int Promise::max_available_thread_idx() const
+{
+ return available_thread.size();
+}
+
/** @brief Print debug info about the Promise */
void Promise::print() const
{