# aTest
**Repository Path**: ulimax-001/a-test
## Basic Information
- **Project Name**: aTest
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-11
- **Last Updated**: 2026-03-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# A Test
* 请写一个RingBuffer类(环形缓冲区),其数据存储可以用数组/堆/等来实现:
a) 构造函数RingBuffer(uint32_t size),满足初始化存储空间的大小为size个元素
b) 成员函数Write(uint32_t data), 满足每次写入一个非负数,如果没有空间,返回-1
c) 成员函数Read(xxx), 满足每次取出最早写入的值,如果无值可取,返回-1
d) 成员函数GetWriteableSize(), 查询可写空间大小
e) 成员函数GetReadableSize(), 查询可取空间大小
* 请写一个main函数测试你的RingBuffer
a) size 为16
b) 有两个线程,先启动读线程,10ms后再启动写线程
c) 写线程每500ms写10个数据(0,1,2,3...);读线程每600ms随机读区(1~20个数据)并打印出读出的数据及个数
注意:
a)bufferRing支持多线程同时Write和Read
b)如果不能使用锁,如何保证数据安全(不强制写无锁代码)
==========提示==============
* 随机数/时间
```c
//C
#include
rand();
srand();
#include time t;
srand(time(&t)); // 如果需要种子的话
#include
struct timeval tv;
gettimeofda(&tv, NULL);
srand(tv.tv_sec*1000000 + tv.tv_usec); // 想要ms级的随机数
```
```cpp
//C++
#include
std::default_random_engine e;
#include
std::default_random_engine e(std::chrono::system_clock::now().time_since_epoch().count()); // 想要有随机数
std::uniform_int_distribution u (1, 20);
auto val = u(e);
```
* 锁:
```cpp
#include
std::mutex; // std::lock_guardstd::mutex
```
* 线程:
```cpp
#include
std::thread
```
* 睡眠:
```cpp
#include
std::this_thread::sleep_for();
#include
std::chrono::milliseconds(500);
```