Files
phs_v1.0.1.0/commonlibrary/c_utils/docs/zh-cn/c-utils-guide-safe_queue.md
2024-09-27 19:16:49 +08:00

2.9 KiB
Raw Permalink Blame History

线程安全栈与队列

概述

简介

线程安全队列是在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)
出栈操作

使用示例

  1. 示例代码
#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;
    }
}
  1. 测试用例编译运行方法
  • 测试用例代码参见base/test/unittest/common/utils_safe_queue_test.cpp

  • 使用开发者自测试框架,使用方法参见:开发自测试执行框架-测试用例执行

  • 使用以下具体命令以运行safe_queue.h对应测试用例

run -t UT -tp utils -ts UtilsSafeQueueTest

常见问题