Linux读写锁
读写交叉锁:
头文件
#include <boost/thread/shared_mutex.hpp>
声明
static boost::shared_mutex cmdvelSharedMutex_;
定义
boost::shared_mutex MotionRunParam::currentPoseSharedMutex_;
读写
AGV_Pos GetRealPos() { boost::shared_lock<boost::shared_mutex> readLocker(currentPoseSharedMutex_); return RealPos; } void SetRealPos(const AGV_Pos& currentPose) { boost::unique_lock<boost::shared_mutex> writeLocker(currentPoseSharedMutex_); RealPos = currentPose; }
读写锁(常用于一写多读的情况)用法:
#include <boost/thread/shared_mutex.hpp> boost::shared_mutex sharedMutex_; boost::shared_lock<boost::shared_mutex> readLock(sharedMutex_); boost::unique_lock<boost::shared_mutex> writeLock(sharedMutex_);
C++11封装的原子数据类型std::atomic
std::atomic<原生变量类型> 原生变量类型位数不能超过机器位数,比如64位机器不能超过8位
定义
std::atomic<int> isResetMotor{0}; isResetMotor.store(msg->data()); 设置 int i = isResetMotor.fetch();获取 int i = isResetMotor.fetch_add(1);获取并设置
每天进步一点点!