多线程一般讲究资源互斥,涉及读写互斥,写写互斥
但是有时候我们却希望多线程直接通过读读共享,提高运行效率
下面是多线程共享公共数组的一段代码:
#include "stdafx.h"
#include "stdio.h"
#include "windows.h"
//#include <process.h> // for _beginthread()
int a[20]={0};
DWORD WINAPI MyThread(LPVOID pParam)
{
for(int j=0;j<20;j++)
{
printf("%d ",a[j]);
if(j%5==0){printf("\n");}
}
return 0;
}
int main(int argc, char* argv[])
{
// TODO: Place code here.
for(int i=0;i<20;i++)
{
a[i]=i+1;
}
for(i=0;i<3;i++)
{
CreateThread(NULL,0,MyThread,NULL,0,NULL);
}
Sleep(20000);
return 0;
}
运行结果如下图:
很奇怪,明明是三个线程,应该输出60个数字,每个数字输出3次,却输出了62个,14和18分别输出了4次
不明白是何原因。
总结:不加任何控制,使多线程同时访问(只读操作)一个资源,虽然说不会导致程序崩溃,但是依然存在奇怪的问题。
等等,哦,不对,出现这种问题,个人理解应该是对屏幕的写操作发生了冲突。
也就是说,不加任何控制,使多线程同时访问(只读操作)一个资源,是没有问题的