You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
59 lines
1.2 KiB
// 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
|