---
title: 显式同步
description: "对于异步任务接口，主机线程调用异步任务接口后仅代表下发任务，不代表任务执行完成。用户需要显式调用设备同步、流同步等显式同步接口等待任务完成。调用此类显式同步接口后，主机线程会阻塞直到相关的任务执行完成。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/acldevg/runtime_doc_dev_0014.html
sourcePath: /source/zh/canncommercial/900/programug/acldevg/runtime_doc_dev_0014.html
indexId: 5b973e7473568f59f69642110321122b013840f942fb88221845d545c86cc11273
---
# 显式同步

对于异步任务接口，主机线程调用异步任务接口后仅代表下发任务，不代表任务执行完成。用户需要显式调用设备同步、流同步等显式同步接口等待任务完成。调用此类显式同步接口后，主机线程会阻塞直到相关的任务执行完成。

#### 设备同步：aclrtSynchronizeDevice

阻塞当前主机线程直到当前Device的当前Context中所有显式或隐式创建的Stream完成已下发的所有任务。

以下是设备同步代码示例，不可以直接拷贝编译运行，仅供参考。

```
// 指定Device
aclrtSetDevice(0);

// 创建Stream
aclrtStream stream;
aclrtCreateStream(&stream);

// 在Stream上下发任务
......

// 阻塞应用程序运行，直到正在运算中的Device完成运算
aclrtSynchronizeDevice();

// 资源销毁
aclrtDestroyStream(stream);
aclrtResetDevice(0);
```


#### 流同步：aclrtSynchronizeStream

阻塞当前主机线程直到指定的Stream完成已下发的所有任务。

以下是流同步的代码示例，不可以直接拷贝编译运行，仅供参考。

```
// 创建Stream
aclrtStream stream;
aclrtCreateStream(&stream);

// 在Stream上下发任务
......

// 调用aclrtSynchronizeStream接口，阻塞应用程序运行，直到指定Stream中的所有任务都完成。
aclrtSynchronizeStream(stream);

// Stream使用结束后，显式销毁Stream
aclrtDestroyStream(stream);
```

此外，用户可以使用aclrtStreamQuery查询stream上的任务是否全部执行完成。
