X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=promise.cc;h=68290eecefac6c7ed72673e01a941e9f0afda3be;hb=32de2bfc3e9c027730e174614e46010121d09215;hp=b051ef078bf8dbe92e817cb75b06a593b46ab1ca;hpb=bdef0741b8a01e16946d261bc2a657af5a683b3e;p=model-checker.git diff --git a/promise.cc b/promise.cc index b051ef0..68290ee 100644 --- a/promise.cc +++ b/promise.cc @@ -1,8 +1,34 @@ #include "promise.h" +#include "model.h" +#include "schedule.h" -Promise::Promise(ModelAction *act, uint64_t value) { - this->value=value; - this->read=act; - this->numthreads=1; +bool Promise::increment_threads(thread_id_t tid) { + unsigned int id=id_to_int(tid); + if ( id >= synced_thread.size() ) { + synced_thread.resize(id+1, false); + } + if (synced_thread[id]) + return false; + + synced_thread[id]=true; + enabled_type_t * enabled=model->get_scheduler()->get_enabled(); + unsigned int sync_size=synced_thread.size(); + int promise_tid=id_to_int(read->get_tid()); + for(unsigned int i=1;iget_num_threads();i++) { + if ((i >= sync_size || !synced_thread[i]) && ( (int)i != promise_tid ) && (enabled[i] != THREAD_DISABLED)) { + return false; + } + } + return true; } +bool Promise::check_promise() { + enabled_type_t * enabled=model->get_scheduler()->get_enabled(); + unsigned int sync_size=synced_thread.size(); + for(unsigned int i=1;iget_num_threads();i++) { + if ((i >= sync_size || !synced_thread[i]) && (enabled[i] != THREAD_DISABLED)) { + return false; + } + } + return true; +}