/* * Copyright (c) 2017 - present Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ #include namespace basics { class LockGuard { public: LockGuard() {} void set(int new_value) { not_guarded = new_value; suspiciously_written = new_value; std::lock_guard lock(mutex_); well_guarded = new_value; suspiciously_read = new_value; } int get1() { int result; std::lock_guard lock(mutex_); result = well_guarded; return result; } int get2() { int result; std::lock_guard lock(mutex_); result = suspiciously_written; return result; } int get3() { return not_guarded; } int get4() { return suspiciously_read; } private: int well_guarded; int suspiciously_read; int suspiciously_written; int not_guarded; std::mutex mutex_; }; }