1.其中, func1和func2中都使用信号量myMutex,两个函数里面都是while死循环。
错误现象:两个子线程老是没有执行完或不执行。
代码如下:
int main()
{
myMutex = CreateMutex(...); //初始化
_beginthread(func1, 0 , 0);
_beginthread(func2, 0 , 0);
CloseHandle(myMutex);
getchar();
return 0;
}
猜测的原因:
mian()函数这一主线程与子线程应该是一起在运行,所以可能在两个子线程还没有运行到wait the myMutex的时候,mian就把myMutex给Close了。
修改:
int main()
{
HANDLE myThread[2];
myMutex = CreateMutex(...); //初始化
myThread[0] = (HANDLE) _beginthread(func1, 0 , 0);
myThread[1] = (HANDLE) _beginthread(func2, 0 , 0);
WaitForMultipleObjects(2, myThread, 1, INFINITE);
CloseHandle(myMutex);
getchar();
return 0;
}
同样哈,昨天想用临界区,在EnterCriticalSection(&cs);这一行 编译报错:写入位置00000...14时发生访问冲突。也是这个原因啦!!!
总结:
在使用到critical section或mutex或semaphore这些时,在mian函数中初始化或create,然后一定要等到线程结束使用到这些东西后再在mian函数中close或delete掉。