---
title: 安全函数过滤使用场景
description: "用户可以通过在数据竞争检查命令devkit advisor dr-check之后，添加-s/--safe-file参数的方式，实现在动态内存一致性检测期间不检测数据竞争的安全函数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/devkit_24_t50/cliuserguide/KunpengDevKitCli_0095.html
sourcePath: /source/zh/kunpengdevkithistory/devkit_24_t50/cliuserguide/KunpengDevKitCli_0095.html
indexId: 0da43a725050e241f6d145e285c73b508f9de88a1fbf31eee86567df3a96b49885
---
# 安全函数过滤使用场景

用户可以通过在数据竞争检查命令devkit advisor dr-check之后，添加-s/--safe-file参数的方式，实现在动态内存一致性检测期间不检测数据竞争的安全函数。

添加-s/--safe-file参数需指定cfg配置文件，文件中写入需要过滤安全函数的名称。若为cpp文件，必须写入重载后的安全函数名称。

#### 安全函数过滤使用示例

本示例通过指定安全函数过滤cfg配置文件，执行数据竞争检查后实现安全函数过滤操作。

1. 此处以自定义类添加锁为例，请根据实际情况在-s指定的配置文件中添加安全函数。
  “/home/advisor/test”文件内容： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class my_custom_spinlock{ std::atomic_flag is_locked ={false}; public: void lock(){ while (is_locked.test_and_set(std::memory_order_acquire)){} } void unlock (){ is_locked .clear (std :: memory_order_release); } }; int data_race = 0; my_custom_spinlock spinlock; void* first_thread(void* arg){ spinlock.lock(); data_race = 5; spinlock.unlock(); return 0; } void* second_thread(void* arg){ spinlock.lock(); data_race = 3; spinlock.unlock(); return 0; }

  “/home/advisor/test”：ELF文件路径，请根据实际情况进行修改。

2. 执行数据竞争检查。
  1 devkit advisor dr-check -f /home/advisor/test

  返回信息如下，从返回信息中的加粗信息可以看出有2行代码推荐修改。

```
Executing data race check task, please wait...
Scanned time: 2024/09/10 03:06:15
Configuration:
Elf filepath: /home/advisor/test
Scan source code path: /home/testcase/project
Generate report path: /home/DevKit_Software
Generate report type: all
Task Timeout Interval: The timeout period is not set.
Log level: info
Summary:
There are 2 recommendable code lines to modify.
For the details information, please check:
/home/DevKit_Software/dr-check_20240910030615_554d.json
/home/DevKit_Software/dr-check_20240910030615_554d.html
/home/DevKit_Software/dr-check_20240910030615_554d.csv
```


3. 通过nm命令可查看test文件中first_thread和second_thread函数重载后名称。
  1 nm test

  回显信息如下：

  1 2 0000000000400a84 T _Z12first_threadPv 0000000000400ac4 T _Z13second_threadPv

4. 创建配置文件safe_functions.cfg，写入内容。
  1 2 _Z12first_threadPv _Z13second_threadPv

5. 再次执行数据竞争检查。

```
devkit advisor dr-check -f
/home/advisor/test
-s
/home/testcase/safe_functions.cfg
```


  “/home/testcase/safe_functions.cfg”：cfg配置文件，指定在动态数据竞争检测中不进行检查的安全函数，请根据实际情况进行修改。

  返回信息如下，从返回信息中的加粗信息可以看出无代码行需要修改，实现安全函数过滤操作。

```
Executing data race check task, please wait...
Scanned time: 2024/09/10 03:15:15
Configuration:
Elf filepath: /home/advisor/test
Scan source code path: /home/testcase/project
Generate report path: /home/DevKit_Software
Generate report type: all
Task Timeout Interval: The timeout period is not set.
Log level: info
Summary:
There are 0 recommendable code lines to modify.
For the details information, please check:
/home/DevKit_Software/dr-check_20240910031515_663d.json
/home/DevKit_Software/dr-check_20240910031515_663d.html
/home/DevKit_Software/dr-check_20240910031515_663d.csv
```
