同一个进程下的多线程是多个独立的执行流,它们会并发地访问共享资源,这种情况下可能会出现问题:
#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 秒后,可以控制让两个线程异步的进行,这时才会达到自增两次的效果。
标签:导致,global,自增,问题,并发,线程,sleep,main From: https://www.cnblogs.com/MyXjil/p/17166507.html