---
title: aclmdlRICaptureThreadExchangeMode
description: "须知：本接口为试验特性，后续版本可能会存在变更，不支持应用于商用产品中。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/runtimeapi/aclcppdevg_03_1788.html
sourcePath: /source/zh/canncommercial/900/API/runtimeapi/aclcppdevg_03_1788.html
indexId: 4df2c566532ec2e36dcfe5f63147fb3eee33b28d8eb6a2a13f1aa8a8e9063dd368
---
# aclmdlRICaptureThreadExchangeMode

须知：本接口为试验特性，后续版本可能会存在变更，不支持应用于商用产品中。

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | ☓ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | ☓ |


#### 功能说明

切换当前线程的捕获模式。

调用本接口会将调用线程的捕获模式设置为*mode中包含的值，并通过*mode返回该线程之前设置的模式。

建议在aclmdlRICaptureBegin和aclmdlRICaptureEnd接口之间调用本接口切换当前线程的模式。各捕获模式的配置说明如下，说明中的其它线程指“没有调用aclmdlRICaptureBegin接口、不在捕获状态”的线程。- 若aclmdlRICaptureBegin接口将捕获模式设置为ACL_MODEL_RI_CAPTURE_MODE_RELAXED（下文简称RELAXED模式），表示所有线程都可以调用非安全函数，这时即使在其它线程（指不在捕获状态的线程）中调用本接口将捕获模式设置为其它值也不会生效，其它线程还是按照RELAXED模式。
- 若aclmdlRICaptureBegin接口将捕获模式设置为ACL_MODEL_RI_CAPTURE_MODE_THREAD_LOCAL（下文简称THREAD_LOCAL模式），表示当前线程禁止调用非安全函数，但其它线程可以调用非安全函数。如果本线程要调用非安全函数，需调用本接口将当前线程模式切换为RELAXED模式。
- 若aclmdlRICaptureBegin接口将捕获模式设置为ACL_MODEL_RI_CAPTURE_MODE_GLOBAL（下文简称GLOBAL模式），表示所有线程都不可以调用非安全函数。本线程若要调用非安全函数，需调用本接口切换为RELAXED模式，其它线程若要调用非安全函数，需调用本接口切换为RELAXED模式或THREAD_LOCAL模式。


#### 函数原型

```
aclError aclmdlRICaptureThreadExchangeMode(aclmdlRICaptureMode *mode)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| mode | 输入&输出 | 捕获模式，用于限制非安全函数（包括aclrtMemset、aclrtMemcpy、aclrtMemcpy2d以及使用非Host锁页内存进行异步内存复制操作的接口，如aclrtMemcpyAsync接口）的作用范围。 类型定义请参见aclmdlRICaptureMode。 |


#### 返回值说明

返回0表示成功，返回其他值表示失败，请参见aclError。


#### 接口调用示例

接口调用示例，参见单流捕获(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/runtime_doc_dev_0030.html)。
