EnterCriticalSection时候异常,请教大侠

Leo_red 2008-08-29 11:00:00
我多线程发起6个线程乱跑时,除抛出异常0xc00000005,居然是在
EnterCriticalSection的时候,很奇怪,请教各位这是什么原因阿?

我是正常的初始化了临界区的,调用的InitializeCriticalSection。就是几个线程乱跑时会随机出现这个问题。
我的操作系统是XPSP3
...全文
1384 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xue23 2011-11-21
  • 打赏
  • 举报
回复
sofa
vigorousfish 2010-10-12
  • 打赏
  • 举报
回复
KANKAN
vonfrostburn 2009-11-26
  • 打赏
  • 举报
回复
需要回复才能阅读,太损了
Leo_red 2008-09-03
  • 打赏
  • 举报
回复
555.只能加100分,我就血本交大家朋友把...
Leo_red 2008-09-03
  • 打赏
  • 举报
回复
嗯,确实还是因为有越界造成了异常.越界是梦魇阿,总是冤枉别的好人.
感谢各位鼎力相助,帖子补到50分,希望各位满意.
licry01 2008-09-02
  • 打赏
  • 举报
回复 1
支持4楼的,请检查其他地方的代码是否有内存误操作之类的东东.
比如,内存操作越界什么的.
我有一次也碰上这个问题,也是在EnterCriticalSection出现异常0xc00000005,而问题不在这上面,是我的内存操作越界,我的一个长度为50的数组,我执行了下面的操作:
TCHAR buff[50];
memset(buff,100,0);
Leo_red 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gaoteng1984 的回复:]
引用楼主 Leo_red 的帖子:
我是正常的初始化了临界区的,调用的InitializeCriticalSection。就是几个线程乱跑时会随机出现这个问题。


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

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

zhkza99c 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 superlym2005 的回复:]
是否有嵌套
[/Quote]
我也觉得可能有嵌套
gaoteng1984 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 Leo_red 的帖子:]
我是正常的初始化了临界区的,调用的InitializeCriticalSection。就是几个线程乱跑时会随机出现这个问题。
[/Quote]

在主线程里先调了InitializeCriticalSection,然后再创建的6个子线程吗?
Leo_red 2008-09-01
  • 打赏
  • 举报
回复
哦,四楼说的有道理。我调试时候确实是早就知道 VC在多线程情况下它显示出问题的地方那个经常是在真正出问题的地方之后。
但是因为临界区本身涉及内核对象,感觉很不确定。

回5楼:逻辑检查拉一下,没有嵌套的加锁,但是似乎嵌套的加并递归解锁出来不会有问题的吧?

顺便再问,在网上看到一个帖子,没有加锁的情况下解锁会出现异常,我写代码试了一下,并没有异常出现。
各位大侠说说会有异常抛出吗?
JonathanS666 2008-09-01
  • 打赏
  • 举报
回复
是否有嵌套
danscort2000 2008-08-31
  • 打赏
  • 举报
回复
你应该注意代码其他地方
VC多线程调试有个问题,那就是常常出现异常已经发生,但是代码依然在继续运行
你应该检查之前的代码
Leo_red 2008-08-31
  • 打赏
  • 举报
回复
对了,那就顺便问问InitializeCriticalSectionAndSpinCount这个函数的问题。
我的是XP系统,怎么便以时候好像不能使用这个函数阿。
网上查一查好像说是这个只能在2000和之前的操作系统上使用。
c38041125 2008-08-29
  • 打赏
  • 举报
回复
InitializeCriticalSectionAndSpinCount()
c38041125 2008-08-29
  • 打赏
  • 举报
回复
InitialazeCriticalSectionAndSpinCount()代替InitializeCriticalSection()试试.

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧