C++ 异步读写安全的缓存区
来源:互联网 发布:mysql如何使用 编辑:程序博客网 时间:2024/05/22 10:24
//// Created by mqd on 2016/12/6.//#ifndef _ASYNCBUF_H#define _ASYNCBUF_H#include <string>#include <cstdint>#include "safe_delete.h"#include "base_constructor.h"template <typename T>class AsyncBuf {public:explicit AsyncBuf(int32_t len):_len(len),_begIndex(0),_endIndex(0) {_buf = new T[_len];}bool Push(const T* buf, int32_t len) {if (_len - GetContentLen() <= len){return false;}else{if (_len - _endIndex >= len){memcpy(_buf + _endIndex, buf, len * sizeof(T));_endIndex += len;_endIndex %= _len;}else{int afterLen = _len - _endIndex;memcpy(_buf + _endIndex, buf, afterLen * sizeof(T));int frontLen = len - afterLen;memcpy(_buf, buf + afterLen, frontLen * sizeof(T));_endIndex = frontLen;}return true;}}T* Pop(int32_t len) {if (GetContentLen() < len){return nullptr;}else{T* tempBuf = new T[len];if (_endIndex > _begIndex){memcpy(tempBuf, _buf + _begIndex, len * sizeof(T));_begIndex += len;}else{int afterLen = _len - _begIndex;if (afterLen >= len){memcpy(tempBuf, _buf + _begIndex, len * sizeof(T));_begIndex += len;_begIndex %= _len;}else{memcpy(tempBuf, _buf + _begIndex, afterLen * sizeof(T));int frontLen = len - afterLen;memcpy(tempBuf + afterLen, _buf, frontLen * sizeof(T));_begIndex = frontLen;}}return tempBuf;}}~AsyncBuf() {safe_delete::SafeDeleteArray(_buf);}private:int32_t _begIndex;int32_t _endIndex;int32_t _len;T* _buf;int GetContentLen() const {if (_begIndex < _endIndex){return (_endIndex - _begIndex);}else if (_begIndex > _endIndex) {return (_len - (_begIndex - _endIndex));}return 0;}DISALLOW_COPY_AND_ASSIGN(AsyncBuf)};#endif //_ASYNCBUF_H
0 0
- C++ 异步读写安全的缓存区
- 编写线程安全的Java缓存读写机制 (原创)
- C#.net 异步读写文件
- TimesTen 应用层数据库缓存学习:5. 异步读写缓存
- 【C/C++】对于可重入、线程安全、异步信号安全几个概念的理解
- 实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC
- 实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC
- 实战Memcached缓存系统(6)Memcached异步实时读写问题的解决方案SAC
- 用于缓存的读写锁
- 【C#】62. 异步读写文件的几种方法: Task.Factory.FromAsync,WriteAsync
- 线程安全的缓存代码
- thinkphp的调试缓存安全
- 异步读写
- 异步读写
- linux c (1) 不带缓存的文件读写;建立目录
- C语言互斥锁-条件变量实现公共缓存区数据读写
- 异步读写的简单串口类
- 关于异步读写串口的注意事项
- 数据库中的join
- 巧用美女照做微信吸粉,你会做吗?
- Laravel Predis Error while reading line from the server.
- hbase 数据的导入导出
- Matlab与线性代数 -- 稀疏矩阵的图形显示
- C++ 异步读写安全的缓存区
- MySQL不太记得什么的笔记。。。待补充整理
- 应用程序、进程、任务栈的区别
- Vue.js:使用vue-cli快速构建项目
- mysql 5.7 登录,密码修改及忘记密码
- java内存回收
- 用 wait-notify 写一段代码来解决生产者-消费者问题?
- java文件读取写出乱码问题解决
- react native(七) 界面 UI-demo