互斥锁也有现成的实现,互斥锁的操作流程和读写锁类似,区别在于互斥锁的情况更为简单,而读写锁要稍微复杂一些,因为读写锁涉及到读和写两种情况。互斥锁主要用于对玩家数据就是修改操作时等,但是一般也不会直接在服务器中被使用,而是先进行一下封装:
class MyMutexLock
{
public:
MyMutexLock(int kind = PTHREAD_MUTEX_FAST_NP) {
pthread_mutexattr_t attr;
::pthread_mutexattr_init(&attr);
::pthread_mutexattr_settype(&attr, kind);
::pthread_mutex_init(&mutex, &attr);
}
~MyMutexLock() {
::pthread_mutex_destroy(&_lock);
}
void lock() {
::pthread_mutex_lock(&_lock);
}
void unlock() {
::pthread_mutex_unlock(&_lock);
}
pthread_mutex_t _lock;
};
还可以基于MyMutexLock做进一步的封装:
class MyMutexLock_Local
{
public:
MyMutexLock_Local(MyMutexLock&lo) : _lock(lo) {
_lock.lock();
}
~MyMutexLock_Local() {
_lock.unlock();
}
MyMutexLock&_lock;
};
这种封装方式有个好处就是在函数开头或者代码块开头使用一下,作用域外,就会自动解锁,不需要手动写代码,稍微简洁一些。
参考资料:
https://www.cnblogs.com/evenleee/p/11309156.html
https://blog.youkuaiyun.com/tanga842428/article/details/52765037?utm_source=blogxgwz2
本文详细解析了互斥锁与读写锁的工作原理及应用,互斥锁适用于单一写操作场景,而读写锁则能同时支持读取和写入。文章提供了互斥锁的C++实现代码,并介绍了基于互斥锁的本地锁类,通过自动解锁机制提升代码简洁性。
1731

被折叠的 条评论
为什么被折叠?



