在双核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中释放了一个