并发可能导致的问题
同一个进程下的多线程是多个独立的执行流,它们会并发地访问共享资源,这种情况下可能会出现问题:
#include <47func.h> //系统目录下自定义的头文件(包含下面函数所需的头文件)
int global = 0; // 共享资源
void* threadFunc(void* arg)
{
global++;
}
int main()
{
pthread_t tid;
pthread_create(&tid,NULL,threadFunc,NULL);
//sleep(1);
global++;
printf("global = %d\n",global);
return 0;
}
若main线程中不加sleep函数,打印出来global的值为 1 ;加sleep函数,打印出来为2。
父子线程并发访问共享资源,若不加sleep函数,则在子线程进行自增操作的过程中,由于CPU的调度被打断,打断后执行main线程的自增操作,自增后,将结果写回内存,随后继续子线程的自增操作,完毕后再此写回内存,这样其实只是完成了一次+1,第二次只是将原来的结果覆盖罢了。sleep 1 秒后,可以控制让两个线程异步的进行,这时才会达到自增两次的效果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律