目录

Function Flow Runtime C API

任务管理

[h2]ffrt_deps_t

声明

typedef enum {
    ffrt_dependence_data,
    ffrt_dependence_task,
} ffrt_dependence_type_t;

typedef struct {
    ffrt_dependence_type_t type;
    const void* ptr;
} ffrt_dependence_t;

typedef struct {
    uint32_t len;
    const ffrt_dependence_t* items;
} ffrt_deps_t;

参数

描述

ffrt_dependence_t作用等同C++的dependence,ffrt_deps_t作用等同C++的std::vector<dependence>。

样例

// 创建数据依赖
int x = 0;
ffrt_dependence_t data_dependence[1];
data_dependence[0].type = ffrt_dependence_data;
data_dependence[0].ptr = &x;
ffrt_deps_t data_deps;
data_deps.len = 1;
data_deps.items = data_dependence;

// 创建任务依赖
ffrt_task_handle_t task = ffrt_submit_h_base(user_function_header, NULL, NULL, &attr);
ffrt_dependence_t task_dependence[1];
task_dependence[0].type = ffrt_dependence_task;
task_dependence[0].ptr = task;
ffrt_deps_t task_deps;
task_deps.len = 1;
task_deps.items = task_dependence;

[h2]ffrt_task_attr_t

声明

typedef struct {
    uint32_t storage[(ffrt_task_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
} ffrt_task_attr_t;

描述

任务的属性描述,在提交普通任务或者队列任务时,可以通过ffrt_task_attr_t来配置其属性。

方法

ffrt_task_attr_init

FFRT_C_API int ffrt_task_attr_init(ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_task_attr_destroy

FFRT_C_API void ffrt_task_attr_destroy(ffrt_task_attr_t* attr);

参数

描述

ffrt_task_attr_set_name

FFRT_C_API void ffrt_task_attr_set_name(ffrt_task_attr_t* attr, const char* name);

参数

描述

ffrt_task_attr_get_name

FFRT_C_API const char* ffrt_task_attr_get_name(const ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_task_attr_set_qos

FFRT_C_API void ffrt_task_attr_set_qos(ffrt_task_attr_t* attr, ffrt_qos_t qos);

参数

描述

ffrt_task_attr_get_qos

FFRT_C_API ffrt_qos_t ffrt_task_attr_get_qos(const ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_task_attr_set_delay

FFRT_C_API void ffrt_task_attr_set_delay(ffrt_task_attr_t* attr, uint64_t delay_us);

参数

描述

ffrt_task_attr_get_delay

FFRT_C_API uint64_t ffrt_task_attr_get_delay(const ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_task_attr_set_queue_priority

FFRT_C_API void ffrt_task_attr_set_queue_priority(ffrt_task_attr_t* attr, ffrt_queue_priority_t priority);

参数

描述

ffrt_task_attr_get_queue_priority

FFRT_C_API ffrt_queue_priority_t ffrt_task_attr_get_queue_priority(const ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_task_attr_set_stack_size

FFRT_C_API void ffrt_task_attr_set_stack_size(ffrt_task_attr_t* attr, uint64_t size);

参数

描述

ffrt_task_attr_get_stack_size

FFRT_C_API uint64_t ffrt_task_attr_get_stack_size(const ffrt_task_attr_t* attr);

参数

返回值

描述

样例

// 提交一个普通任务,其名称为"sample_task",QoS等级为background,调度时延为1ms,协程栈大小为2MB
ffrt_task_attr_t attr;
ffrt_task_attr_init(&attr);
ffrt_task_attr_set_name(&attr, "sample_task");
ffrt_task_attr_set_qos(&attr, ffrt_qos_background);
ffrt_task_attr_set_delay(&attr, 1000);
ffrt_task_attr_set_stack_size(&attr, 2 * 1024 * 1024);
ffrt_submit_base(user_function_header, NULL, NULL, &attr);
ffrt_task_attr_destroy(&attr);

[h2]ffrt_alloc_auto_managed_function_storage_base

声明

typedef enum {
    ffrt_function_kind_general,
    ffrt_function_kind_queue,
} ffrt_function_kind_t;

typedef void(*ffrt_function_t)(void*);
typedef struct {
    ffrt_function_t exec;
    ffrt_function_t destroy;
    uint64_t reserve[2];
} ffrt_function_header_t;

FFRT_C_API void *ffrt_alloc_auto_managed_function_storage_base(ffrt_function_kind_t kind);

参数

返回值

描述

分配了一块内存空间,内存空间头部为ffrt_function_header_t结构体(返回指针可转换为ffrt_function_header_t*指针使用)。头部后留有64字节的可用空间,用户可自定义使用该空间,通常用于入参或返回值的存储。

样例

[h2]ffrt_submit_base

声明

FFRT_C_API void ffrt_submit_base(ffrt_function_header_t* f, const ffrt_deps_t* in_deps, const ffrt_deps_t* out_deps, const ffrt_task_attr_t* attr);

参数

描述

提交一个普通任务,任务支持相关属性设置,在输入依赖解除后任务可调度执行,任务执行完成后解除输出依赖。

样例

[h2]ffrt_submit_f

声明

FFRT_C_API void ffrt_submit_f(ffrt_function_t func, void* arg, const ffrt_deps_t* in_deps, const ffrt_deps_t* out_deps, const ffrt_task_attr_t* attr);

参数

描述

ffrt_submit_f接口是ffrt_submit_base接口的简化包装形式。当任务不需要销毁回调函数时,接口内部将任务函数及其参数包装成通用任务结构,再调用ffrt_submit_base接口提交任务。

从API version 20开始,支持该接口。

样例

#include <stdio.h>
#include "ffrt/task.h"

// 待提交执行的函数
void OnePlusForTest(void* arg)
{
    (*static_cast<int*>(arg)) += 1;
}

int main()
{
    int a = 0;
    ffrt_submit_f(OnePlusForTest, &a, NULL, NULL, NULL);

    ffrt_wait();

    printf("a = %d\n", a);
    return 0;
}

[h2]ffrt_submit_h_base

声明

typedef void* ffrt_task_handle_t;

FFRT_C_API ffrt_task_handle_t ffrt_submit_h_base(ffrt_function_header_t* f, const ffrt_deps_t* in_deps, const ffrt_deps_t* out_deps, const ffrt_task_attr_t* attr);

参数

返回值

描述

相比于ffrt_submit_base接口,增加了任务句柄的返回值。

样例

// 提交一个任务,获取任务句柄
ffrt_function_header_t* func = (ffrt_function_header_t*)ffrt_alloc_auto_managed_function_storage_base(ffrt_function_kind_general);
func->exec = foo;
func->destroy = after_foo;
ffrt_task_handle_t t = ffrt_submit_h_base(func, NULL, NULL, NULL);
// 注意C API的ffrt_task_handle_t需要用户调用ffrt_task_handle_destroy显式销毁
ffrt_task_handle_destroy(t);

[h2]ffrt_submit_h_f

声明

typedef void* ffrt_task_handle_t;

FFRT_C_API ffrt_task_handle_t ffrt_submit_h_f(ffrt_function_t func, void* arg, const ffrt_deps_t* in_deps, const ffrt_deps_t* out_deps, const ffrt_task_attr_t* attr);

参数

返回值

描述

相比于ffrt_submit_f接口,增加了任务句柄的返回值。

从API version 20开始,支持该接口。

样例

#include <stdio.h>
#include <vector>
#include "ffrt/task.h"

// 待提交执行的函数
void OnePlusForTest(void* arg)
{
    (*static_cast<int*>(arg)) += 1;
}

int main()
{
    int a = 0;
    ffrt_task_handle_t task = ffrt_submit_h_f(OnePlusForTest, &a, NULL, NULL, NULL);

    const std::vector<ffrt_dependence_t> wait_deps = {{ffrt_dependence_task, task}};
    ffrt_deps_t wait{static_cast<uint32_t>(wait_deps.size()), wait_deps.data()};
    ffrt_wait_deps(&wait);

    printf("a = %d\n", a);
    return 0;
}

[h2]ffrt_task_handle_inc_ref

声明

FFRT_C_API uint32_t ffrt_task_handle_inc_ref(ffrt_task_handle_t handle);

参数

返回值

描述

通过任务句柄增加对应任务的引用计数,每次调用引用计数加一。用于控制任务的生命周期使用,当引用计数不为零时,对应的任务资源不会被释放。注意ffrt_submit_h_base返回的ffrt_task_handle_t默认已有一个引用计数。通过ffrt_task_handle_destroy销毁ffrt_task_handle_t时默认减去一个引用计数。

[h2]ffrt_task_handle_dec_ref

声明

FFRT_C_API uint32_t ffrt_task_handle_dec_ref(ffrt_task_handle_t handle);

参数

返回值

描述

通过任务句柄减去对应任务的引用计数,每次调用引用计数减一。

[h2]ffrt_task_handle_destroy

声明

FFRT_C_API void ffrt_task_handle_destroy(ffrt_task_handle_t handle);

参数

描述

销毁任务句柄,同时默认减去一个任务引用计数。

[h2]ffrt_wait

声明

FFRT_C_API void ffrt_wait(void);

描述

同步等待所有前序提交的同级任务完成。

样例

// 同步三个任务完成
ffrt_submit_base(func1, NULL, NULL, NULL);
ffrt_submit_base(func2, NULL, NULL, NULL);
ffrt_submit_base(func3, NULL, NULL, NULL);
ffrt_wait();

[h2]ffrt_wait_deps

声明

FFRT_C_API void ffrt_wait_deps(const ffrt_deps_t* deps);

参数

描述

同步对应的数据依赖解除。

样例

// 构建x的数据依赖
int x = 0;
ffrt_dependence_t dependence[1];
dependence[0].type = ffrt_dependence_data;
dependence[0].ptr = &x;
ffrt_deps_t deps;
deps.len = 1;
deps.items = dependence;

// 提交一个写任务
ffrt_submit_base(func, NULL, &deps, NULL);

// 同步写任务解除数据依赖
ffrt_wait_deps(&deps);

[h2]ffrt_this_task_update_qos

声明

FFRT_C_API int ffrt_this_task_update_qos(ffrt_qos_t qos);

参数

返回值

描述

在任务执行过程中,动态修改任务的QoS等级。注意该接口在任务的函数闭包内使用,修改的是当前正在执行的任务的QoS等级,接口调用会使任务先挂起一次再恢复执行。

样例

// 一个qos_background的任务执行过程中动态修改QoS等级
ffrt::submit([]() {
    // ...
    int ret = ffrt_this_task_update_qos(ffrt_qos_user_initiated);
    // ...
}, ffrt::task_attr().qos(ffrt::qos_background));

[h2]ffrt_this_task_get_qos

声明

FFRT_C_API ffrt_qos_t ffrt_this_task_get_qos(void);

返回值

描述

获取当前正在执行任务的QoS等级。

样例

// 一个任务执行过程中动态获取其QoS等级
ffrt::submit([]() {
    // ...
    // 获取的qos等于ffrt_qos_background
    ffrt_qos_t qos = ffrt_this_task_get_qos();
    // ...
}, ffrt::task_attr().qos(ffrt::qos_background));

[h2]ffrt_this_task_get_id

声明

FFRT_C_API uint64_t ffrt_this_task_get_id(void);

返回值

描述

获取当前正在执行任务的id。

样例

// 一个任务执行过程中动态获取其任务id
ffrt::submit([]() {
    // ...
    // 获取的唯一任务id
    uint64_t task_id = ffrt_this_task_get_id();
    // ...
}, ffrt::task_attr().qos(ffrt::qos_background));

任务队列

[h2]ffrt_queue_attr_t

声明

typedef struct {
    uint32_t storage[(ffrt_queue_attr_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
} ffrt_queue_attr_t;

描述

用于配置队列的属性,如 QoS、超时时间、回调函数和最大并发数。

方法

ffrt_queue_attr_init

int ffrt_queue_attr_init(ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_attr_destroy

void ffrt_queue_attr_destroy(ffrt_queue_attr_t* attr);

参数

描述

ffrt_queue_attr_set_qos

void ffrt_queue_attr_set_qos(ffrt_queue_attr_t* attr, ffrt_qos_t qos);

参数

描述

ffrt_queue_attr_get_qos

ffrt_qos_t ffrt_queue_attr_get_qos(const ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_attr_set_timeout

void ffrt_queue_attr_set_timeout(ffrt_queue_attr_t* attr, uint64_t timeout_us);

参数

描述

ffrt_queue_attr_get_timeout

uint64_t ffrt_queue_attr_get_timeout(const ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_attr_set_callback

void ffrt_queue_attr_set_callback(ffrt_queue_attr_t* attr, ffrt_function_header_t* f);

参数

描述

ffrt_queue_attr_get_callback

ffrt_function_header_t* ffrt_queue_attr_get_callback(const ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_attr_set_max_concurrency

void ffrt_queue_attr_set_max_concurrency(ffrt_queue_attr_t* attr, const int max_concurrency);

参数

描述

ffrt_queue_attr_get_max_concurrency

int ffrt_queue_attr_get_max_concurrency(const ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_attr_set_thread_mode

void ffrt_queue_attr_set_thread_mode(ffrt_queue_attr_t* attr, bool mode);

参数

描述

从API version 20开始,支持该接口。

ffrt_queue_attr_get_thread_mode

bool ffrt_queue_attr_get_thread_mode(const ffrt_queue_attr_t* attr);

参数

返回值

描述

从API version 20开始,支持该接口。

样例

#include <functional>
#include "ffrt/queue.h"
#include "ffrt/cpp/task.h"

int main()
{
    ffrt_queue_attr_t queue_attr;
    // 初始化队列属性,必需
    ffrt_queue_attr_init(&queue_attr);

    ffrt_queue_attr_set_qos(&queue_attr, static_cast<int>(ffrt_qos_utility));

    ffrt_queue_attr_set_timeout(&queue_attr, 10000);

    int x = 0;
    std::function<void()>&& basicFunc = [&x]() { x += 1; };
    ffrt_function_header_t* func = ffrt_queue_attr_get_callback(&queue_attr);

    ffrt_queue_attr_set_callback(&queue_attr, ffrt::create_function_wrapper(basicFunc, ffrt_function_kind_queue));
    // 销毁队列属性,必需
    ffrt_queue_attr_destroy(&queue_attr);
    return 0;
}

[h2]ffrt_queue_t

声明

typedef void* ffrt_queue_t;

描述

队列指针,提供一系列C接口支持队列任务的提交、取消、等待和排队任务数量查询。

方法

ffrt_queue_create

ffrt_queue_t ffrt_queue_create(ffrt_queue_type_t type, const char* name, const ffrt_queue_attr_t* attr);

参数

返回值

描述

ffrt_queue_destroy

void ffrt_queue_destroy(ffrt_queue_t queue);

参数

描述

ffrt_queue_submit

void ffrt_queue_submit(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr);

参数

描述

ffrt_queue_submit_f

void ffrt_queue_submit_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr);

参数

描述

从API version 20开始,支持该接口。

ffrt_queue_submit_h

ffrt_task_handle_t ffrt_queue_submit_h(ffrt_queue_t queue, ffrt_function_header_t* f, const ffrt_task_attr_t* attr);

参数

返回值

描述

ffrt_queue_submit_h_f

ffrt_task_handle_t ffrt_queue_submit_h_f(ffrt_queue_t queue, ffrt_function_t func, void* arg, const ffrt_task_attr_t* attr);

参数

返回值

描述

从API version 20开始,支持该接口。

ffrt_queue_wait

void ffrt_queue_wait(ffrt_task_handle_t handle);

参数

描述

ffrt_queue_cancel

int ffrt_queue_cancel(ffrt_task_handle_t handle);

参数

返回值

描述

ffrt_get_main_queue

ffrt_queue_t ffrt_get_main_queue();

返回值

描述

ffrt_get_current_queue

ffrt_queue_t ffrt_get_current_queue();

返回值

描述

样例

#include "ffrt/queue.h"
#include "ffrt/cpp/task.h"

int main()
{
    ffrt_queue_attr_t queue_attr;
    // 1、初始化队列属性,必需
    (void)ffrt_queue_attr_init(&queue_attr);

    // 2、创建串行队列,并返回队列句柄queue_handle
    ffrt_queue_t queue_handle = ffrt_queue_create(ffrt_queue_serial, "test_queue", &queue_attr);

    int result = 0;
    std::function<void()>&& basicFunc = [&result]() { result += 1; };

    // 3、提交串行任务
    ffrt_queue_submit(queue_handle, ffrt::create_function_wrapper(basicFunc, ffrt_function_kind_queue), nullptr);

    // 4、提交串行任务,并返回任务句柄
    ffrt_task_handle_t t1 = ffrt_queue_submit_h(queue_handle, ffrt::create_function_wrapper(basicFunc, ffrt_function_kind_queue), nullptr);
    // 5、等待指定任务执行完成
    ffrt_queue_wait(t1);

    ffrt_task_handle_t t2 = ffrt_queue_submit_h(queue_handle, ffrt::create_function_wrapper(basicFunc, ffrt_function_kind_queue), nullptr);
    // 6、取消句柄为 t2 的任务
    ffrt_queue_cancel(t2);

    // 7、销毁提交给串行队列任务的句柄 t1 和 t2,必需
    ffrt_task_handle_destroy(t1);
    ffrt_task_handle_destroy(t2);
    // 8、销毁队列属性,必需
    ffrt_queue_attr_destroy(&queue_attr);
    // 9、销毁队列句柄,必需
    ffrt_queue_destroy(queue_handle);
    return 0;
}

同步原语

[h2]ffrt_mutexattr_t

声明

typedef enum {
    ffrt_error = -1,
    ffrt_success = 0,
    ffrt_error_nomem = ENOMEM,
    ffrt_error_timedout = ETIMEDOUT,
    ffrt_error_busy = EBUSY,
    ffrt_error_inval = EINVAL
} ffrt_error_t;

typedef enum {
    ffrt_mutex_normal = 0,
    ffrt_mutex_recursive = 2,
    ffrt_mutex_default = ffrt_mutex_normal
} ffrt_mutex_type;

struct ffrt_mutexattr_t;

int ffrt_mutexattr_init(ffrt_mutexattr_t* attr);
int ffrt_mutexattr_settype(ffrt_mutexattr_t* attr, int type);
int ffrt_mutexattr_gettype(ffrt_mutexattr_t* attr, int* type);
int ffrt_mutexattr_destroy(ffrt_mutexattr_t* attr);

描述

方法

ffrt_mutexattr_init

FFRT_C_API int ffrt_mutexattr_init(ffrt_mutexattr_t* attr);

参数

返回值

描述

ffrt_mutexattr_destroy

FFRT_C_API int ffrt_mutexattr_destroy(ffrt_mutexattr_t* attr);

参数

返回值

描述

ffrt_mutexattr_settype

FFRT_C_API int ffrt_mutexattr_settype(ffrt_mutexattr_t* attr, int type);

参数

返回值

描述

ffrt_mutexattr_gettype

FFRT_C_API int ffrt_mutexattr_gettype(ffrt_mutexattr_t* attr, int* type);

参数

返回值

描述

样例

ffrt_mutexattr_t attr;
// 初始化锁属性
ffrt_mutexattr_init(&attr);
// 设置为互斥锁
ffrt_mutexattr_settype(&attr, ffrt_mutex_normal);
// 设置为递归锁
ffrt_mutexattr_settype(&attr, ffrt_mutex_recursive);
// 获取锁类型
int type = ffrt_mutex_default;
ffrt_mutexattr_gettype(&attr, &type);
// 销毁锁属性
ffrt_mutexattr_destroy(&attr);

[h2]ffrt_mutex_t

声明

struct ffrt_mutex_t;
struct ffrt_mutexattr_t;

int ffrt_mutex_init(ffrt_mutex_t* mutex, const ffrt_mutexattr_t* attr);
int ffrt_mutex_lock(ffrt_mutex_t* mutex);
int ffrt_mutex_unlock(ffrt_mutex_t* mutex);
int ffrt_mutex_trylock(ffrt_mutex_t* mutex);
int ffrt_mutex_destroy(ffrt_mutex_t* mutex);

描述

方法

ffrt_mutex_init

FFRT_C_API int ffrt_mutex_init(ffrt_mutex_t* mutex, const ffrt_mutexattr_t* attr);

参数

返回值

描述

ffrt_mutex_destroy

FFRT_C_API int ffrt_mutex_destroy(ffrt_mutex_t* mutex);

参数

返回值

描述

ffrt_mutex_lock

FFRT_C_API int ffrt_mutex_lock(ffrt_mutex_t* mutex);

参数

返回值

描述

ffrt_mutex_unlock

FFRT_C_API int ffrt_mutex_unlock(ffrt_mutex_t* mutex);

参数

返回值

描述

ffrt_mutex_trylock

FFRT_C_API int ffrt_mutex_trylock(ffrt_mutex_t* mutex);

参数

返回值

描述

样例

#include "ffrt/mutex.h"
#include "ffrt/cpp/task.h"

int main()
{
    ffrt_mutexattr_t attr;
    ffrt_mutex_t lock;
    int sum = 0;
    int type = ffrt_mutex_default;
    ffrt_mutexattr_init(&attr);
    ffrt_mutexattr_settype(&attr, ffrt_mutex_recursive);
    ffrt_mutexattr_gettype(&attr, &type);
    ffrt_mutex_init(&lock, &attr);
    ffrt::submit([&]() {
        ffrt_mutex_lock(&lock);
        ffrt_mutex_trylock(&lock);
        sum++;
        ffrt_mutex_lock(&lock);
        ffrt_mutex_trylock(&lock);
        sum++;
        ffrt_mutex_unlock(&lock);
        ffrt_mutex_unlock(&lock);
        ffrt_mutex_unlock(&lock);
        ffrt_mutex_unlock(&lock);
        }, {}, {});

    ffrt::wait();

    ffrt_mutexattr_destroy(&attr);
    ffrt_mutex_destroy(&lock);
    return 0;
}

[h2]ffrt_rwlock_t

声明

struct ffrt_rwlock_t;
struct ffrt_rwlockattr_t;

int ffrt_rwlock_init(ffrt_rwlock_t* rwlock, const ffrt_rwlockattr_t* attr);
int ffrt_rwlock_wrlock(ffrt_rwlock_t* rwlock);
int ffrt_rwlock_rdlock(ffrt_rwlock_t* rwlock);
int ffrt_rwlock_trywrlock(ffrt_rwlock_t* rwlock);
int ffrt_rwlock_tryrdlock(ffrt_rwlock_t* rwlock);
int ffrt_rwlock_unlock(ffrt_rwlock_t* rwlock);
int ffrt_rwlock_destroy(ffrt_rwlock_t* rwlock);

描述

方法

ffrt_rwlock_init

FFRT_C_API int ffrt_rwlock_init(ffrt_rwlock_t* rwlock, const ffrt_rwlockattr_t* attr);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_wrlock

FFRT_C_API int ffrt_rwlock_wrlock(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_rdlock

FFRT_C_API int ffrt_rwlock_rdlock(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_trywrlock

FFRT_C_API int ffrt_rwlock_trywrlock(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_tryrdlock

FFRT_C_API int ffrt_rwlock_tryrdlock(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_unlock

FFRT_C_API int ffrt_rwlock_unlock(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

ffrt_rwlock_destroy

FFRT_C_API int ffrt_rwlock_destroy(ffrt_rwlock_t* rwlock);

参数

返回值

描述

从API version 18开始,支持该接口。

样例

#include "ffrt/shared_mutex.h"
#include "ffrt/sleep.h"
#include "ffrt/cpp/task.h"

int main()
{
    ffrt_rwlock_t rwlock;
    int x = 0;
    ffrt_rwlock_init(&rwlock, nullptr);
    ffrt::submit([&]() {
        ffrt_rwlock_wrlock(&rwlock);
        ffrt_usleep(10);
        x++;
        ffrt_rwlock_unlock(&rwlock);
    },{},{});

    ffrt::submit([&]() {
        ffrt_usleep(2);
        ffrt_rwlock_rdlock(&rwlock);
        ffrt_rwlock_unlock(&rwlock);
    },{},{});

    ffrt::submit([&]() {
        ffrt_usleep(2);
        if(ffrt_rwlock_trywrlock(&rwlock) == ffrt_success){
            x++;
            ffrt_rwlock_unlock(&rwlock);
        }
    },{},{});

    ffrt::submit([&]() {
        ffrt_usleep(2);
        if(ffrt_rwlock_tryrdlock(&rwlock) == ffrt_success){
            ffrt_rwlock_unlock(&rwlock);
        }
    },{},{});

    ffrt::wait();

    ffrt_rwlock_destroy(&rwlock);
    return 0;
}

[h2]ffrt_cond_t

声明

typedef enum {
    ffrt_error = -1,
    ffrt_success = 0,
    ffrt_error_nomem = ENOMEM,
    ffrt_error_timedout = ETIMEDOUT,
    ffrt_error_busy = EBUSY,
    ffrt_error_inval = EINVAL
} ffrt_error_t;

typedef struct {
    uint32_t storage[(ffrt_cond_storage_size + sizeof(uint32_t) - 1) / sizeof(uint32_t)];
} ffrt_cond_t;

int ffrt_cond_init(ffrt_cond_t* cond, const ffrt_condattr_t* attr);
int ffrt_cond_signal(ffrt_cond_t* cond);
int ffrt_cond_broadcast(ffrt_cond_t* cond);
int ffrt_cond_wait(ffrt_cond_t*cond, ffrt_mutex_t* mutex);
int ffrt_cond_timedwait(ffrt_cond_t* cond, ffrt_mutex_t* mutex, const struct timespec* time_point);
int ffrt_cond_destroy(ffrt_cond_t* cond);

描述

方法

ffrt_cond_init

FFRT_C_API int ffrt_cond_init(ffrt_cond_t* cond, const ffrt_condattr_t* attr);

参数

返回值

描述

ffrt_cond_destroy

FFRT_C_API int ffrt_cond_destroy(ffrt_cond_t* cond);

参数

返回值

描述

ffrt_cond_signal

FFRT_C_API int ffrt_cond_signal(ffrt_cond_t* cond);

参数

返回值

描述

ffrt_cond_broadcast

FFRT_C_API int ffrt_cond_broadcast(ffrt_cond_t* cond);

参数

返回值

描述

ffrt_cond_wait

FFRT_C_API int ffrt_cond_wait(ffrt_cond_t* cond, ffrt_mutex_t* mutex);

参数

返回值

描述

ffrt_cond_timedwait

FFRT_C_API int ffrt_cond_timedwait(ffrt_cond_t* cond, ffrt_mutex_t* mutex, const struct timespec* time_point);

参数

返回值

描述

样例

#include <iostream>
#include "ffrt/condition_variable.h"
#include "ffrt/mutex.h"
#include "ffrt/sleep.h"
#include "ffrt/cpp/task.h"

struct timespec timeoutms_to_tm(int timeout_ms) {
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    ts.tv_sec += timeout_ms / 1000;
    ts.tv_nsec += (timeout_ms % 1000) * 1000000;
    if (ts.tv_nsec >= 1000000000) {
        ts.tv_sec += 1;
        ts.tv_nsec -= 1000000000;
    }
    return ts;
}

int main()
{
    int a = 0;
    ffrt_cond_t cond;
    ffrt_mutex_t lock_;
    ffrt_cond_init(&cond, nullptr);
    ffrt_mutex_init(&lock_, nullptr);

    for (int i = 0; i < 3; i++) {
        ffrt::submit([&]() {
            int timeout = 2000;
            struct timespec tm = timeoutms_to_tm(timeout);
            ffrt_mutex_lock(&lock_);
            auto start = std::chrono::high_resolution_clock::now();
            ffrt_cond_timedwait(&cond, &lock_, &tm);
            auto end = std::chrono::high_resolution_clock::now();
            a = 123;
            ffrt_mutex_unlock(&lock_);
            std::chrono::duration<double, std::milli> elapsed = end - start;
            double t = elapsed.count();
            std::cout << "ffrt_cond_timedwait " << t << " ms" << std::endl;
            }, {}, {});
    }

    ffrt::submit([&]() {
        ffrt_usleep(1000 * 1000);
        ffrt_mutex_lock(&lock_);
        a = 5;
        ffrt_cond_broadcast(&cond);
        ffrt_mutex_unlock(&lock_);
        }, {}, {});
    ffrt::wait();
    ffrt_cond_destroy(&cond);
    ffrt_mutex_destroy(&lock_);
    return 0;
}

阻塞原语

[h2]ffrt_usleep

声明

FFRT_C_API int ffrt_usleep(uint64_t usec);

参数

描述

样例

#include "ffrt/sleep.h"
#include "ffrt/cpp/task.h"

int main()
{
    ffrt::submit([=]() { ffrt_usleep(10); }, {}, {});
    ffrt::wait();
    return 0;
}

协同原语

[h2]ffrt_yield

声明

FFRT_C_API void ffrt_yield();

描述

样例

#include <iostream>
#include "ffrt/sleep.h"
#include "ffrt/cpp/task.h"

int main()
{
    int count = 12;
    for (int i = 0; i < count; i++) {
        ffrt::submit([&]() {
            ffrt_usleep(100);
            std::cout << "test" << std::endl;
            ffrt_yield();
        }, {}, {});
    }
    ffrt::wait();
    return 0;
}

定时器

[h2]ffrt_timer_t

声明

typedef int ffrt_timer_t;
typedef void (*ffrt_timer_cb)(void* data);

描述

提供定时器相关的功能。

方法

ffrt_timer_start

声明

FFRT_C_API ffrt_timer_t ffrt_timer_start(ffrt_qos_t qos, uint64_t timeout, void* data, ffrt_timer_cb cb, bool repeat);

参数

返回值

描述

ffrt_timer_stop

声明

FFRT_C_API int ffrt_timer_stop(ffrt_qos_t qos, ffrt_timer_t handle);

参数

返回值

描述

样例

循环

[h2]ffrt_loop_t

声明

typedef void* ffrt_loop_t;

描述

提供循环相关的功能。

方法

ffrt_loop_create

声明

FFRT_C_API ffrt_loop_t ffrt_loop_create(ffrt_queue_t queue);

参数

返回值

描述

ffrt_loop_destroy

声明

FFRT_C_API int ffrt_loop_destroy(ffrt_loop_t loop);

参数

返回值

描述

ffrt_loop_run

声明

FFRT_C_API int ffrt_loop_run(ffrt_loop_t loop);

参数

返回值

描述

ffrt_loop_stop

声明

FFRT_C_API void ffrt_loop_stop(ffrt_loop_t loop);

参数

描述

ffrt_loop_epoll_ctl

声明

int ffrt_loop_epoll_ctl(ffrt_loop_t loop, int op, int fd, uint32_t events, void *data, ffrt_poller_cb cb)

参数

返回值

描述

ffrt_loop_timer_start

声明

FFRT_C_API ffrt_timer_t ffrt_loop_timer_start(ffrt_loop_t loop, uint64_t timeout, void* data, ffrt_timer_cb cb, bool repeat);

参数

返回值

描述

ffrt_loop_timer_stop

声明

FFRT_C_API int ffrt_loop_timer_stop(ffrt_loop_t loop, ffrt_timer_t handle);

参数

返回值

描述

样例

纤程

[h2]ffrt_fiber_t

声明

struct ffrt_fiber_t;

描述

方法

ffrt_fiber_init

声明

FFRT_C_API int ffrt_fiber_init(ffrt_fiber_t* fiber, void(*func)(void*), void* arg, void* stack, size_t stack_size);

参数

返回值

描述

从API version 20开始,支持该接口。

ffrt_fiber_switch

声明

FFRT_C_API void ffrt_fiber_switch(ffrt_fiber_t* from, ffrt_fiber_t* to);

参数

描述

从API version 20开始,支持该接口。