☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

避免并发访问位域造成的数据竞争

16.8 ID_bitfieldDataRaces
目录 › next › previous

相邻的位域成员可能在一个存储单元中,所以并发访问位域也可能造成数据竞争。

示例:

struct A {
    unsigned x: 1;
    unsigned y: 1;
} a;

void thr1() {
    a.x = 0;    // Non-compliant, missing lock
}

void thr2() {
    a.y = 1;    // Non-compliant, missing lock
}

设例中 thr1 和 thr2 是可以并发执行的函数,位域成员 x 和 y 在一个存储单元中,对 x 或 y 的更新相当于用新数据更新存储单元的值,再将存储单元的值整体写入内存,这个过程如果是异步并发执行的就会产生错误,所以对不同位域成员的并发访问也应保证合理的同步措施。

相关

ID_dataRaces ID_forbidBitfield

依据

ISO/IEC 9899:2011 3.14(3) ISO/IEC 14882:2011 1.7(4)

参考

SEI CERT CON32-C SEI CERT CON52-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.