harmony 鸿蒙GPU/CPU内存访问同步操作开发指南 (C/C++)
GPU/CPU内存访问同步操作开发指南 (C/C++)
场景介绍
NativeFence是提供同步管理fenceFd的模块。开发者可以通过NativeFence
接口实现对fenceFd阻塞指定时间、永久阻塞、关闭和检查fenceFd是否有效等操作。
接口说明
接口名 | 描述 |
---|---|
OH_NativeFence_IsValid (int fenceFd) | 检查fenceFd是否有效。 |
OH_NativeFence_Wait (int fenceFd, uint32_t timeout) | 阻塞传入的fenceFd,最大阻塞时间由超时参数决定。 |
OH_NativeFence_WaitForever (int fenceFd) | 永久阻塞传入的fenceFd。 |
OH_NativeFence_Close (int fenceFd) | 关闭fenceFd。 |
详细的接口说明请参考NativeFence。
开发步骤
以下步骤描述了如何使用NativeFence
提供的Native API接口。
添加动态链接库
CMakeLists.txt中添加以下lib。
libnative_fence.so
头文件
#include <native_fence/native_fence.h>
#include <cstring>
#include <iostream>
#include <linux/sync_file.h>
#include <signal.h>
#include <sys/signalfd.h>
#include <unistd.h>
通过signalfd创建fenceFd。
sigset_t mask; sigemptyset(&mask); sigprocmask(SIG_BLOCK, &mask, NULL); int fenceFd = signalfd(-1, &mask, 0);
判断传入的fenceFd是否合法。
// 检查fenceFd是否有效 bool isValid = OH_NativeFence_IsValid(fenceFd); if (!isValid) { std::cout << "fenceFd is invalid" << std::endl; }
调用OH_NativeFence_Wait阻塞接口。
constexpr uint32_t TIMEOUT_MS = 5000; bool resultWait = OH_NativeFence_Wait(fenceFd, TIMEOUT_MS); if (!resultWait) { std::cout << "OH_NativeFence_Wait Failed" << std::endl; }
调用OH_NativeFence_WaitForever阻塞接口。
bool resultWaitForever = OH_NativeFence_WaitForever(fenceFd); if (!resultWaitForever) { std::cout << "OH_NativeFence_WaitForever Failed" << std::endl; }
GPU或CPU进行信号触发signal,通知fenceFd解除阻塞。
关闭fenceFd。
OH_NativeFence_Close(fenceFd);
你可能感兴趣的鸿蒙文章
harmony 鸿蒙ArkGraphics 2D(方舟2D图形服务)
harmony 鸿蒙画布的获取与绘制结果的显示(ArkTS)
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦