高并发
游戏猫
多年游戏开发经验,在这里分享经验和心得
展开
-
unique_lock使用示例、源码分析
一、概要 unique_lock实现了lock_guard类似的功能,但unique_lock保证了只有一个unique_lock拥有mutex,同时提供了转移拥有权的接口。 二、代码示例 #pragma once #include <mutex> #include <thread> #include <iostream> using namespace std; class UniqueLockTest { private: mutex _mutex; int co原创 2020-07-18 00:06:34 · 513 阅读 · 3 评论 -
lock_guard原理解析
一、说明 lock_guard用来包装Mutex,实现Mutex的自动锁定和解锁。能保证锁定过程中逻辑异常也能自动解锁。 二、windows下的源码 template<class _Mutex> class lock_guard<_Mutex> { // specialization for a single mutex public: typedef _Mutex mutex_type; explicit lock_guard(_Mutex& _Mtx) //传的原创 2020-07-16 00:21:01 · 1707 阅读 · 0 评论 -
promise使用示例
一、概要 promise实现跨线程设置和获取值,底层使用了mutex来保证设置值的原子性,通过future实现了跨线程等待获取结果。 二、代码 #pragma once #include <future> #include <thread> #include <chrono> #include <iostream> using namespace std; class PromiseTest { private: promise<int> p;原创 2020-07-14 00:06:25 · 226 阅读 · 0 评论 -
C++future、async使用示例
一、概述 async可以启动一个线程(不保证)来处理逻辑,async调用后悔返回一个future,通过future可以用来等待处理完成或查看处理进度。 二、代码 #pragma once #include <future> #include <chrono> using namespace std; class AsyncTest { private: int count = 0; int maxLoop = 2000000000; public: int process()原创 2020-07-13 00:57:06 · 625 阅读 · 0 评论 -
SpinLock源码
一、概要 spinLock的基本原理是如果发现其他人锁着,就一直循环,知道其他人解锁后,再上锁。一般SpinLock适用于锁的时间很短的情况,通过不断判定是否可以加锁,避免适用Mutex这类操作系统锁带来不能锁定时的上下文切换。 二、实现源码 #pragma once #include <atomic> #include <thread> using namespace std; class SpinLock { private: atomic<bool> _flag;原创 2020-07-12 01:29:39 · 317 阅读 · 1 评论