# 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); ```