我多线程发起6个线程乱跑时,除抛出异常0xc00000005,居然是在
EnterCriticalSection的时候,很奇怪,请教各位这是什么原因阿?我是正常的初始化了临界区的,调用的InitializeCriticalSection。就是几个线程乱跑时会随机出现这个问题。
我的操作系统是XPSP3

解决方案 »

  1.   

    InitialazeCriticalSectionAndSpinCount()代替InitializeCriticalSection()试试.
      

  2.   

    InitializeCriticalSectionAndSpinCount()
      

  3.   

    对了,那就顺便问问InitializeCriticalSectionAndSpinCount这个函数的问题。
    我的是XP系统,怎么便以时候好像不能使用这个函数阿。
    网上查一查好像说是这个只能在2000和之前的操作系统上使用。
      

  4.   


    在主线程里先调了InitializeCriticalSection,然后再创建的6个子线程吗?
      

  5.   


    这到不是,这个临界区是被对象持有的,对象可以有很多个,6个线程根据业务随时处理不同的对象。
    为了防止两个以上线程同时操作这个对象时,一些敏感的数据引起问题,就用临界区保护这个数据,要操作该对象的特定数据时候需要先Enter一下。
    所以Initialize是在对象创建出来初始化时候做的。
      

  6.   

    支持4楼的,请检查其他地方的代码是否有内存误操作之类的东东.
    比如,内存操作越界什么的.
    我有一次也碰上这个问题,也是在EnterCriticalSection出现异常0xc00000005,而问题不在这上面,是我的内存操作越界,我的一个长度为50的数组,我执行了下面的操作:
    TCHAR buff[50];
    memset(buff,100,0);