#ifndef MUDUO_BASE_ATOMIC_H #define MUDUO_BASE_ATOMIC_H

#include <boost/noncopyable.hpp> '不可拷贝类,用于禁止拷贝构造和赋值运算符' #include <stdint.h> 'C++标准库中定义了一些数据类型,stdint.h中定义了一些跨平台的整型数据类型'

namespace muduo {

namespace detail '命名空间,用于避免命名冲突' { template '模板类,用于支持不同类型的原子操作' class AtomicIntegerT : boost::noncopyable '不可拷贝类,用于禁止拷贝构造和赋值运算符' { public: AtomicIntegerT() '构造函数,初始化value_为0' : value_(0) { }

T get() '获取当前的value_值' { return _sync_val_compare_and_swap(&value, 0, 0); '原子操作,比较value_和0的值,如果相等则将0赋值给value_并返回原来的value_值' }

T getAndAdd(T x) '获取当前的value_值并加上x' { return _sync_fetch_and_add(&value, x); '原子操作,将value_加上x并返回加之前的value_值' }

T addAndGet(T x) '加上x并返回结果' { return getAndAdd(x) + x; '先获取当前的value_值并加上x,再返回加之后的结果' }

T incrementAndGet() '自增并返回结果' { return addAndGet(1); '加上1并返回结果' }

T decrementAndGet() '自减并返回结果' { return addAndGet(-1); '加上-1并返回结果' }

void add(T x) '加上x' { getAndAdd(x); '获取当前的value_值并加上x,不返回结果' }

void increment() '自增' { incrementAndGet(); '加上1,不返回结果' }

void decrement() '自减' { decrementAndGet(); '加上-1,不返回结果' }

T getAndSet(T newValue) '获取当前的value_值并设置为newValue' { return _sync_lock_test_and_set(&value, newValue); '原子操作,将value_设置为newValue并返回之前的value_值' }

private: volatile T value_; '原子操作的值,声明为volatile类型,确保每次操作都从内存中读取最新的值' }; }

typedef detail::AtomicIntegerT<int32_t> AtomicInt32; '定义AtomicInt32类型为AtomicIntegerT<int32_t>,即支持32位整型的原子操作' typedef detail::AtomicIntegerT<int64_t> AtomicInt64; '定义AtomicInt64类型为AtomicIntegerT<int64_t>,即支持64位整型的原子操作' }

#endif // MUDUO_BASE_ATOMIC_H

Muduo Atomic: Thread-Safe Integer Operations

原文地址: https://www.cveoy.top/t/topic/nnoV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录