int a[5];
HANDLE hMutex;
void thread(void *pParams)
{
int i,num=0;
while(num<10)
{
WaitForSingleObject(hMutex,INFINITE);
cout<<"thread begin"<<endl;
for(i=0;i<5;i++)
a[i]=num;
cout<<"thread end"<<num<<endl;
ReleaseMutex(hMutex);
num++;
}
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
hMutex=CreateMutex(NULL,FALSE,NULL);
_beginthread(thread,0,NULL);
int i=0;
while(i++<10)
{
WaitForSingleObject(hMutex,INFINITE);
printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
ReleaseMutex(hMutex);
}
return 0;
return nRetCode;
}
这个程序是从书上抄的,根本达不到线程同步的效果,我用的是vc6
5 个解决方案
#1
这个程序能保证数组内的数据一致,但是不能保证刚好数据内容变化之后打印数据。
我把main里的循环改成了100次,得到的是这个结果:
0 0 0 0 0
thread begin
thread end0
0 0 0 0 0
thread begin
thread end1
1 1 1 1 1
thread begin
thread end2
thread begin
thread end3
thread begin
thread end4
thread begin
thread end5
5 5 5 5 5
...
每次不一样的。
我把main里的循环改成了100次,得到的是这个结果:
0 0 0 0 0
thread begin
thread end0
0 0 0 0 0
thread begin
thread end1
1 1 1 1 1
thread begin
thread end2
thread begin
thread end3
thread begin
thread end4
thread begin
thread end5
5 5 5 5 5
...
每次不一样的。
#2
为什么不是按顺序输出的呢?等待,释放,等待,释放,很有规律啊
#3
项目 属性 C/C++ 代码生成 运行库 选有多线程的选项。
VC6 默认对控制台程序连接的C运行时库不支持多线程。也就是说VC6 默认的设置 C和c++的函数 不支持多线程
VC6 默认对控制台程序连接的C运行时库不支持多线程。也就是说VC6 默认的设置 C和c++的函数 不支持多线程
#4
晕,这就是同步的效果。受保护的代码总是在一起执行。你说的那个规律是由于CPU时间片切换的原因
#5
你这样写根本就不可能有规律,谁先抢到hMutex谁就运行
应该加个event,main函数等待event,线程函数赋值后SetEvent
#1
这个程序能保证数组内的数据一致,但是不能保证刚好数据内容变化之后打印数据。
我把main里的循环改成了100次,得到的是这个结果:
0 0 0 0 0
thread begin
thread end0
0 0 0 0 0
thread begin
thread end1
1 1 1 1 1
thread begin
thread end2
thread begin
thread end3
thread begin
thread end4
thread begin
thread end5
5 5 5 5 5
...
每次不一样的。
我把main里的循环改成了100次,得到的是这个结果:
0 0 0 0 0
thread begin
thread end0
0 0 0 0 0
thread begin
thread end1
1 1 1 1 1
thread begin
thread end2
thread begin
thread end3
thread begin
thread end4
thread begin
thread end5
5 5 5 5 5
...
每次不一样的。
#2
为什么不是按顺序输出的呢?等待,释放,等待,释放,很有规律啊
#3
项目 属性 C/C++ 代码生成 运行库 选有多线程的选项。
VC6 默认对控制台程序连接的C运行时库不支持多线程。也就是说VC6 默认的设置 C和c++的函数 不支持多线程
VC6 默认对控制台程序连接的C运行时库不支持多线程。也就是说VC6 默认的设置 C和c++的函数 不支持多线程
#4
晕,这就是同步的效果。受保护的代码总是在一起执行。你说的那个规律是由于CPU时间片切换的原因
#5
你这样写根本就不可能有规律,谁先抢到hMutex谁就运行
应该加个event,main函数等待event,线程函数赋值后SetEvent