X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=promise.cc;h=ea5e7e635cf47df48a2ffc15fa0cd35d73b76025;hb=fbacb5f41ada96e7b539ccc41deccb1a7e1a1ba8;hp=2bd6637352195a41029b96f220d88b1bff809403;hpb=7823790c1d16dc687bf4bb3d6e3c6de5eb9f6366;p=model-checker.git diff --git a/promise.cc b/promise.cc index 2bd6637..ea5e7e6 100644 --- a/promise.cc +++ b/promise.cc @@ -76,3 +76,23 @@ bool Promise::has_failed() const { return num_available_threads == 0; } + +/** + * @param write A store which could satisfy this Promise + * @return True if the store can satisfy this Promise; false otherwise + */ +bool Promise::is_compatible(const ModelAction *write) const +{ + return thread_is_available(write->get_tid()) && read->same_var(write); +} + +/** + * @brief Check if a promise is compatible with a store and is exclusive to its + * thread + * @param write The store to check against + * @return True if we are compatible and exclusive; false otherwise + */ +bool Promise::is_compatible_exclusive(const ModelAction *write) const +{ + return get_num_available_threads() == 1 && is_compatible(write); +}