多线程使用的小错误

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掉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值