%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2013 the V8 project 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 "src/libplatform/task-queue.h" #include "include/v8-platform.h" #include "src/base/logging.h" #include "src/base/platform/platform.h" #include "src/base/platform/time.h" namespace v8 { namespace platform { TaskQueue::TaskQueue() : process_queue_semaphore_(0), terminated_(false) {} TaskQueue::~TaskQueue() { base::MutexGuard guard(&lock_); DCHECK(terminated_); DCHECK(task_queue_.empty()); } void TaskQueue::Append(std::unique_ptr<Task> task) { base::MutexGuard guard(&lock_); DCHECK(!terminated_); task_queue_.push(std::move(task)); process_queue_semaphore_.Signal(); } std::unique_ptr<Task> TaskQueue::GetNext() { for (;;) { { base::MutexGuard guard(&lock_); if (!task_queue_.empty()) { std::unique_ptr<Task> result = std::move(task_queue_.front()); task_queue_.pop(); return result; } if (terminated_) { process_queue_semaphore_.Signal(); return nullptr; } } process_queue_semaphore_.Wait(); } } void TaskQueue::Terminate() { base::MutexGuard guard(&lock_); DCHECK(!terminated_); terminated_ = true; process_queue_semaphore_.Signal(); } void TaskQueue::BlockUntilQueueEmptyForTesting() { for (;;) { { base::MutexGuard guard(&lock_); if (task_queue_.empty()) return; } base::OS::Sleep(base::TimeDelta::FromMilliseconds(5)); } } } // namespace platform } // namespace v8