0
Files
src/base/atomic_sequence_num.h
Avi Drissman e4622aaecc Update copyright headers in base/
The methodology used to generate this CL is documented in
https://crbug.com/1098010#c34.

An earlier version of this CL, https://crrev.com/c/3879904,
was reverted due to an issue that was resolved with
https://crrev.com/c/3881211.

No-Try: true
Bug: 1098010
Change-Id: Ibd6ffb97e66835bc299fe7b85876c3e2927b2345
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3883841
Auto-Submit: Avi Drissman <avi@chromium.org>
Owners-Override: Avi Drissman <avi@chromium.org>
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1044747}
2022-09-08 20:36:06 +00:00

32 lines
992 B
C++

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_ATOMIC_SEQUENCE_NUM_H_
#define BASE_ATOMIC_SEQUENCE_NUM_H_
#include <atomic>
namespace base {
// AtomicSequenceNumber is a thread safe increasing sequence number generator.
// Its constructor doesn't emit a static initializer, so it's safe to use as a
// global variable or static member.
class AtomicSequenceNumber {
public:
constexpr AtomicSequenceNumber() = default;
AtomicSequenceNumber(const AtomicSequenceNumber&) = delete;
AtomicSequenceNumber& operator=(const AtomicSequenceNumber&) = delete;
// Returns an increasing sequence number starts from 0 for each call.
// This function can be called from any thread without data race.
inline int GetNext() { return seq_.fetch_add(1, std::memory_order_relaxed); }
private:
std::atomic_int seq_{0};
};
} // namespace base
#endif // BASE_ATOMIC_SEQUENCE_NUM_H_