V8 Project
mutex-unittest.cc
Go to the documentation of this file.
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace v8 {
10 namespace base {
11 
12 TEST(Mutex, LockGuardMutex) {
13  Mutex mutex;
14  { LockGuard<Mutex> lock_guard(&mutex); }
15  { LockGuard<Mutex> lock_guard(&mutex); }
16 }
17 
18 
19 TEST(Mutex, LockGuardRecursiveMutex) {
20  RecursiveMutex recursive_mutex;
21  { LockGuard<RecursiveMutex> lock_guard(&recursive_mutex); }
22  {
23  LockGuard<RecursiveMutex> lock_guard1(&recursive_mutex);
24  LockGuard<RecursiveMutex> lock_guard2(&recursive_mutex);
25  }
26 }
27 
28 
29 TEST(Mutex, LockGuardLazyMutex) {
30  LazyMutex lazy_mutex = LAZY_MUTEX_INITIALIZER;
31  { LockGuard<Mutex> lock_guard(lazy_mutex.Pointer()); }
32  { LockGuard<Mutex> lock_guard(lazy_mutex.Pointer()); }
33 }
34 
35 
36 TEST(Mutex, LockGuardLazyRecursiveMutex) {
38  { LockGuard<RecursiveMutex> lock_guard(lazy_recursive_mutex.Pointer()); }
39  {
40  LockGuard<RecursiveMutex> lock_guard1(lazy_recursive_mutex.Pointer());
41  LockGuard<RecursiveMutex> lock_guard2(lazy_recursive_mutex.Pointer());
42  }
43 }
44 
45 
46 TEST(Mutex, MultipleMutexes) {
47  Mutex mutex1;
48  Mutex mutex2;
49  Mutex mutex3;
50  // Order 1
51  mutex1.Lock();
52  mutex2.Lock();
53  mutex3.Lock();
54  mutex1.Unlock();
55  mutex2.Unlock();
56  mutex3.Unlock();
57  // Order 2
58  mutex1.Lock();
59  mutex2.Lock();
60  mutex3.Lock();
61  mutex3.Unlock();
62  mutex2.Unlock();
63  mutex1.Unlock();
64 }
65 
66 
67 TEST(Mutex, MultipleRecursiveMutexes) {
68  RecursiveMutex recursive_mutex1;
69  RecursiveMutex recursive_mutex2;
70  // Order 1
71  recursive_mutex1.Lock();
72  recursive_mutex2.Lock();
73  EXPECT_TRUE(recursive_mutex1.TryLock());
74  EXPECT_TRUE(recursive_mutex2.TryLock());
75  recursive_mutex1.Unlock();
76  recursive_mutex1.Unlock();
77  recursive_mutex2.Unlock();
78  recursive_mutex2.Unlock();
79  // Order 2
80  recursive_mutex1.Lock();
81  EXPECT_TRUE(recursive_mutex1.TryLock());
82  recursive_mutex2.Lock();
83  EXPECT_TRUE(recursive_mutex2.TryLock());
84  recursive_mutex2.Unlock();
85  recursive_mutex1.Unlock();
86  recursive_mutex2.Unlock();
87  recursive_mutex1.Unlock();
88 }
89 
90 } // namespace base
91 } // namespace v8
#define LAZY_MUTEX_INITIALIZER
Definition: mutex.h:107
#define LAZY_RECURSIVE_MUTEX_INITIALIZER
Definition: mutex.h:188
TEST(CPUTest, FeatureImplications)
Definition: cpu-unittest.cc:11
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20