读书人

在双核CPU中,互斥信号量的有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

在双核CPU中,互斥信号量的问题
这貌似是只会在双核的CPU才会出现的问题
我把ticket初始值设为1时
最后运行结果会显示
thread2 ticket sell thread1 ticket sell 10;
也就是说线程1 "sll 0 "了,为什么会这样?请问怎样解决?

#include <windows.h>
#include <iostream>
DWORD WINAPI Fun1Proc(
LPVOID lpParaneter
);
DWORD WINAPI Fun2Proc(
LPVOID lpParaneter
);
int ticket=1;
HANDLE hMutex;
void main(){

HANDLE hThread;
hThread=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread);
hMutex=CreateMutex(NULL,FALSE,NULL);
Sleep(4000);
}

DWORD WINAPI Fun1Proc(
LPVOID lpParaneter
){
while(true){
WaitForSingleObject(hMutex,INFINITE);
if(ticket> 0){
Sleep(10);
std::cout < < "thread1 ticket sell " < <ticket-- < <std::endl;
ReleaseMutex(hMutex);
}
else{
ReleaseMutex(hMutex);
break;
}
}
return 0;
}

DWORD WINAPI Fun2Proc(
LPVOID lpParaneter
){
while(true){
WaitForSingleObject(hMutex,INFINITE);
if(ticket> 0){
Sleep(10);
std::cout < < "thread2 ticket sell " < <ticket-- < <std::endl;
ReleaseMutex(hMutex);
}
else{
ReleaseMutex(hMutex);
break;
}
}
return 0;
}

[解决办法]
我的是单核,没有办法帮你调试,但是你程序中有个问题,我感觉与输出问题有关:
void main(){

HANDLE hThread;
hThread=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread);
hMutex=CreateMutex(NULL,FALSE,NULL);
Sleep(1000);
}
----------------------------
中,你将hMutex=CreateMutex(NULL,FALSE,NULL);放到创建线程之后,估计就好了,因为,你线程创建后,hMutex还没有创建,有可能就有问题了,具体问题我也不说不详细。
还有你两个线程句柄只在main中释放了一个

读书人网 >C++

热点推荐