| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #pragma once
- #include "port/port.h"
- #include "rocksdb/rocksdb_namespace.h"
- namespace ROCKSDB_NAMESPACE {
- // Resource management object for threads that joins the thread upon
- // destruction. Has unique ownership of the thread object, so copying it is not
- // allowed, while moving it transfers ownership.
- class ThreadGuard {
- public:
- ThreadGuard() = default;
- explicit ThreadGuard(port::Thread&& thread) : thread_(std::move(thread)) {}
- ThreadGuard(const ThreadGuard&) = delete;
- ThreadGuard& operator=(const ThreadGuard&) = delete;
- ThreadGuard(ThreadGuard&&) noexcept = default;
- ThreadGuard& operator=(ThreadGuard&&) noexcept = default;
- ~ThreadGuard() {
- if (thread_.joinable()) {
- thread_.join();
- }
- }
- const port::Thread& GetThread() const { return thread_; }
- port::Thread& GetThread() { return thread_; }
- private:
- port::Thread thread_;
- };
- } // namespace ROCKSDB_NAMESPACE
|