请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 121|回复: 0

变量应确保线程安全性

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 19:58:13 | 显示全部楼层 |阅读模式
当一个变量可能被多个线程使用时,应当使用原子操作或加锁操作。

  1. // Bad
  2. char  g_somechar;
  3. void foo_thread1() {
  4.   g_somechar += 3;
  5. }

  6. void foo_thread2() {
  7.   g_somechar += 1;
  8. }
复制代码

对于可以使用原子操作的,应当使用一些可以确保内存安全的操作,如:

  1. // Good
  2. volatile char g_somechar;
  3. void foo_thread1() {
  4.   __sync_fetch_and_add(&g_somechar, 3);
  5. }

  6. void foo_thread2() {
  7.   __sync_fetch_and_add(&g_somechar, 1);
  8. }
复制代码

对于 C 程序代码, C11  后推荐使用 atomic 标准库。 对于 C++代码, C++11  后,推荐使用   std::atomic。

关联漏洞:
  1.   高风险-内存破坏

  2.   中风险-逻辑问题
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 08:45 , Processed in 0.076440 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表