2.9 KiB
2.9 KiB
线程安全栈与队列
概述
简介
线程安全队列,是在dequeue的基础上封装std::lock_guard,以此实现线程的相关操作。根据继承SafeQueueInner抽象类,并对dequeue的pop方法的重写,可以实现SafeStack和SafeQueue的相关方法。
#include <safe_queue.h>
涉及功能
接口说明
OHOS::SafeQueueInner
| 返回值 | 名称 |
|---|---|
| SafeQueueInner() 构造函数 |
|
| virtual ~SafeQueueInner() 析构函数 |
|
| void | Erase(T& object) 移除某个元素 |
| bool | Empty() 队列判空 |
| void | Clear() 清空队列元素 |
| int | Size() 获取队列的容量 |
| void | Push(const T& pt) 入队操作 |
| void | virtual void DoPush(const T& pt) = 0 Push底层调用DoPush,需要重写 |
| bool | Pop(T& pt) 出队操作 |
| bool | virtual DoPop(T& pt) = 0 Push底层调用DoPop,需要重写 |
OHOS::SafeQueue
class SafeQueue : public SafeQueueInner
| 返回值 | 名称 |
|---|---|
| void | DoPush(const T& pt) 入队操作 |
| bool | DoPop(T& pt) 出队操作 |
OHOS::SafeStack
class SafeStack : public SafeQueueInner
| 返回值 | 名称 |
|---|---|
| void | DoPush(const T& pt) 入栈操作 |
| bool | DoPop(T& pt) 出栈操作 |
使用示例
- 示例代码
#include <thread>
#include <iostream>
#include <functional>
#include "../include/safe_queue.h"
using namespace OHOS;
using namespace std;
constexpr int SIZE = 4;
int main() {
SafeQueue<int> sq;
SafeStack<int> st;
for (int i = 0; i < SIZE; i++) {
sq.Push(i);
st.Push(i);
}
for (int i = 0; i < SIZE; i++) {
int queOut;
int stackOut;
sq.Pop(queOut);
st.Pop(stackOut);
cout << "SafeQueue pop: " << queOut << endl;
cout << "SafeStack pop: " << stackOut <<endl;
}
}
- 测试用例编译运行方法
-
测试用例代码参见base/test/unittest/common/utils_safe_queue_test.cpp
-
使用开发者自测试框架,使用方法参见:开发自测试执行框架-测试用例执行
-
使用以下具体命令以运行
safe_queue.h对应测试用例
run -t UT -tp utils -ts UtilsSafeQueueTest