首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-05 
在双核CPU中,互斥信号量的问题这貌似是只会在双核的CPU才会出现的问题我把ticket初始值设为1时最后运行结

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

热点排行