C 语言局部 static 变量多线程 DataRace 验证

验证局部静态变量 static int cnt 在无锁情况下的 data race:

测试 C 源码:

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

void* foo(void* args)
{
    static int cnt = 0;
    printf("%d\n", ++cnt);
}

int main(int argc, char** argv)
{
    if (argc < 2)
        return -1;
    int THREADS_NUM = atoi(argv[1]);

    pthread_t tid[THREADS_NUM];
    for (int i = 0; i < THREADS_NUM; ++i) {
        pthread_create(&tid[i], NULL, foo, NULL);
    }
    for (int i = 0; i < THREADS_NUM; ++i) {
        pthread_join(tid[i], NULL);
    }
}

编译、运行、验证

gcc main.c -lpthread && ./a.out 10000 | sort -n | uniq -dc
  • sort -n 按照数字顺序排序,如果降序则 sort -r
  • uniq -dc 打印重复的行及重复次数

在我的测试环境下,线程数小于 1000 很难发生 data race;线程数设置到 10000 左右即可观察到

posted @   Zijian/TENG  阅读(205)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示