问一个多线程基础问题

APIandMFC 2009-03-11 09:28:34
int index=0;
int tickets=100;
HANDLE hMutex;
DWORD WINAPI FunProc1(LPVOID lpParameter)
{
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
cout<<"Thread1 is telling ticket:"<<tickets--<<endl;
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI FunProc2(LPVOID lpParameter)
{
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
if(tickets>0)
cout<<"Thread2 is telling ticket:"<<tickets--<<endl;
else
break;
ReleaseMutex(hMutex);
}
return 0;
}
void main()
{
HANDLE hThread1,hThread2;
hThread1=CreateThread(NULL,0,FunProc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,FunProc2,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
hMutex=CreateMutex(NULL,FALSE,"tickets");
if(hMutex)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(4000);
}


1 if(hMutex)这是在判断什么?

2if(ERROR_ALREADY_EXISTS==GetLastError())这是在判断什么?

3CloseHandle(hThread1);表示什么?

4WaitForSingleObject(hMutex,INFINITE) 主线程为什么还有写这个?

5两次"ReleaseMutex(hMutex);"分别释放的什么?
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
coyer 2009-03-11
  • 打赏
  • 举报
回复
1. 判断mutex是否创建成功,当Mutex不为0的时候,成立
2. 判断Mutex是否已经存在,因为系统已经存在这个mutex的时候,需要单独判断
3. 关闭线程句柄,是否资源。
4. 这就是等待信号量的问题了。楼主可以看看waitforsingleobject的说明。
5. 释放Mutex,写两遍就错了。
greatws 2009-03-11
  • 打赏
  • 举报
回复
1 if(hMutex)这是在判断什么?
hMutex这个句柄是否为空,也就是CreateMutex执行成功没有

2if(ERROR_ALREADY_EXISTS==GetLastError())这是在判断什么?
判断是否这个互斥体已经存在(被创建)

3CloseHandle(hThread1);表示什么?
关掉线程句柄,释放资源

4WaitForSingleObject(hMutex,INFINITE) 主线程为什么还有写这个?
代码有问题吧,主线程在和其他2个线程一起等一个hMutex? 有可能其他线程还没执行完毕,主线程就退出了?

5两次"ReleaseMutex(hMutex);"分别释放的什么?
应该后面一句为CloseHandle(hMutex);关闭句柄,释放资源。
vcPlayer 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]

5. 释放Mutex,这里应该有两个hMutex1,hMutex2,代码有点问题
[/Quote]

或许是引用计数问题。
oyljerry 2009-03-11
  • 打赏
  • 举报
回复
1. 判断mutex是否创建成功
2. 判断Mutex是否已经存在
3. 关闭线程句柄,是否资源
4. 主线程等待线程中释放Mutex
5. 释放Mutex,这里应该有两个hMutex1,hMutex2,代码有点问题

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧