pytorch/torch/csrc/distributed/c10d/sequence_num.cpp
Aaron Gokaslan 97db9fde69 Fix header-filter for clang-tidy c10 and apply some fixes to c10 and … (#91178)
…c10d

Fixes a broken header filters from #90699 and applies a few more clang-tidy fixes that are relevant from c10 and c10d. The header filter pattern was actually broken and the clang-tidy include pattern was redundant. Also fixed a few bugs in torch/distributed/c10d

Pull Request resolved: https://github.com/pytorch/pytorch/pull/91178
Approved by: https://github.com/ezyang
2022-12-27 07:34:12 +00:00

63 lines
1.4 KiB
C++

#include <ATen/ThreadLocalState.h>
#include <c10/util/Optional.h>
#include <torch/csrc/distributed/c10d/sequence_num.hpp>
#include <c10/util/Logging.h>
namespace c10d {
SequenceNum::SequenceNum() : num_(c10::nullopt) {}
SequenceNum::SequenceNum(const uint64_t num) : num_(num) {}
SequenceNum::SequenceNum(const SequenceNum& other) {
if (!other.isSet()) {
num_ = c10::nullopt;
} else {
num_ = other.get();
}
}
uint64_t SequenceNum::get() const {
std::lock_guard<std::mutex> lock(lock_);
return *num_;
}
void SequenceNum::increment() {
std::lock_guard<std::mutex> lock(lock_);
TORCH_CHECK(num_ != c10::nullopt);
num_ = ++(*num_);
}
// Implemented without above get() and increment() so we don't repeatedly lock
// and unblock.
uint64_t SequenceNum::getAndIncrement() {
uint64_t curVal = 0;
std::lock_guard<std::mutex> lock(lock_);
TORCH_CHECK(num_ != c10::nullopt);
curVal = *num_;
num_ = ++(*num_);
return curVal;
}
void SequenceNum::set(const uint64_t num) {
std::lock_guard<std::mutex> lock(lock_);
num_ = num;
}
bool SequenceNum::isSet() const {
std::lock_guard<std::mutex> lock(lock_);
return num_ != c10::nullopt;
}
SequenceNum& SequenceNum::operator=(const SequenceNum& other) {
std::lock_guard<std::mutex> lock(lock_);
if (!other.isSet()) {
num_ = c10::nullopt;
} else {
num_ = other.get();
}
return *this;
}
} // namespace c10d