12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright (c) 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "thread_annotations.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace {
- class LOCKABLE Lock {
- public:
- void Acquire() EXCLUSIVE_LOCK_FUNCTION() {}
- void Release() UNLOCK_FUNCTION() {}
- };
- class SCOPED_LOCKABLE AutoLock {
- public:
- AutoLock(Lock& lock) EXCLUSIVE_LOCK_FUNCTION(lock) : lock_(lock) {
- lock.Acquire();
- }
- ~AutoLock() UNLOCK_FUNCTION() { lock_.Release(); }
- private:
- Lock& lock_;
- };
- class ThreadSafe {
- public:
- void ExplicitIncrement();
- void ImplicitIncrement();
- private:
- Lock lock_;
- int counter_ GUARDED_BY(lock_);
- };
- void ThreadSafe::ExplicitIncrement() {
- lock_.Acquire();
- ++counter_;
- lock_.Release();
- }
- void ThreadSafe::ImplicitIncrement() {
- AutoLock auto_lock(lock_);
- counter_++;
- }
- TEST(ThreadAnnotationsTest, ExplicitIncrement) {
- ThreadSafe thread_safe;
- thread_safe.ExplicitIncrement();
- }
- TEST(ThreadAnnotationsTest, ImplicitIncrement) {
- ThreadSafe thread_safe;
- thread_safe.ImplicitIncrement();
- }
- } // anonymous namespace
|