| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/base/platform/condition-variable.h" | 5 #include "src/base/platform/condition-variable.h" |
| 6 | 6 |
| 7 #include "src/base/platform/platform.h" | 7 #include "src/base/platform/platform.h" |
| 8 #include "src/base/platform/time.h" | 8 #include "src/base/platform/time.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 class ThreadWithMutexAndConditionVariable final : public Thread { | 32 class ThreadWithMutexAndConditionVariable final : public Thread { |
| 33 public: | 33 public: |
| 34 ThreadWithMutexAndConditionVariable() | 34 ThreadWithMutexAndConditionVariable() |
| 35 : Thread(Options("ThreadWithMutexAndConditionVariable")), | 35 : Thread(Options("ThreadWithMutexAndConditionVariable")), |
| 36 running_(false), | 36 running_(false), |
| 37 finished_(false) {} | 37 finished_(false) {} |
| 38 virtual ~ThreadWithMutexAndConditionVariable() {} | |
| 39 | 38 |
| 40 virtual void Run() override { | 39 void Run() override { |
| 41 LockGuard<Mutex> lock_guard(&mutex_); | 40 LockGuard<Mutex> lock_guard(&mutex_); |
| 42 running_ = true; | 41 running_ = true; |
| 43 cv_.NotifyOne(); | 42 cv_.NotifyOne(); |
| 44 while (running_) { | 43 while (running_) { |
| 45 cv_.Wait(&mutex_); | 44 cv_.Wait(&mutex_); |
| 46 } | 45 } |
| 47 finished_ = true; | 46 finished_ = true; |
| 48 cv_.NotifyAll(); | 47 cv_.NotifyAll(); |
| 49 } | 48 } |
| 50 | 49 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 namespace { | 108 namespace { |
| 110 | 109 |
| 111 class ThreadWithSharedMutexAndConditionVariable final : public Thread { | 110 class ThreadWithSharedMutexAndConditionVariable final : public Thread { |
| 112 public: | 111 public: |
| 113 ThreadWithSharedMutexAndConditionVariable() | 112 ThreadWithSharedMutexAndConditionVariable() |
| 114 : Thread(Options("ThreadWithSharedMutexAndConditionVariable")), | 113 : Thread(Options("ThreadWithSharedMutexAndConditionVariable")), |
| 115 running_(false), | 114 running_(false), |
| 116 finished_(false), | 115 finished_(false), |
| 117 cv_(NULL), | 116 cv_(NULL), |
| 118 mutex_(NULL) {} | 117 mutex_(NULL) {} |
| 119 virtual ~ThreadWithSharedMutexAndConditionVariable() {} | |
| 120 | 118 |
| 121 virtual void Run() override { | 119 void Run() override { |
| 122 LockGuard<Mutex> lock_guard(mutex_); | 120 LockGuard<Mutex> lock_guard(mutex_); |
| 123 running_ = true; | 121 running_ = true; |
| 124 cv_->NotifyAll(); | 122 cv_->NotifyAll(); |
| 125 while (running_) { | 123 while (running_) { |
| 126 cv_->Wait(mutex_); | 124 cv_->Wait(mutex_); |
| 127 } | 125 } |
| 128 finished_ = true; | 126 finished_ = true; |
| 129 cv_->NotifyAll(); | 127 cv_->NotifyAll(); |
| 130 } | 128 } |
| 131 | 129 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 rem_(rem), | 224 rem_(rem), |
| 227 counter_(counter), | 225 counter_(counter), |
| 228 limit_(limit), | 226 limit_(limit), |
| 229 thread_count_(thread_count), | 227 thread_count_(thread_count), |
| 230 cv_(cv), | 228 cv_(cv), |
| 231 mutex_(mutex) { | 229 mutex_(mutex) { |
| 232 EXPECT_LT(rem, thread_count); | 230 EXPECT_LT(rem, thread_count); |
| 233 EXPECT_EQ(0, limit % thread_count); | 231 EXPECT_EQ(0, limit % thread_count); |
| 234 } | 232 } |
| 235 | 233 |
| 236 virtual void Run() override { | 234 void Run() override { |
| 237 int last_count = -1; | 235 int last_count = -1; |
| 238 while (true) { | 236 while (true) { |
| 239 LockGuard<Mutex> lock_guard(mutex_); | 237 LockGuard<Mutex> lock_guard(mutex_); |
| 240 int count = *counter_; | 238 int count = *counter_; |
| 241 while (count % thread_count_ != rem_ && count < limit_) { | 239 while (count % thread_count_ != rem_ && count < limit_) { |
| 242 cv_->Wait(mutex_); | 240 cv_->Wait(mutex_); |
| 243 count = *counter_; | 241 count = *counter_; |
| 244 } | 242 } |
| 245 if (count >= limit_) break; | 243 if (count >= limit_) break; |
| 246 EXPECT_EQ(*counter_, count); | 244 EXPECT_EQ(*counter_, count); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 delete threads[n]; | 290 delete threads[n]; |
| 293 } | 291 } |
| 294 delete[] threads; | 292 delete[] threads; |
| 295 | 293 |
| 296 EXPECT_EQ(limit, counter); | 294 EXPECT_EQ(limit, counter); |
| 297 } | 295 } |
| 298 } | 296 } |
| 299 | 297 |
| 300 } // namespace base | 298 } // namespace base |
| 301 } // namespace v8 | 299 } // namespace v8 |
| OLD | NEW |