首页
社区
课程
招聘
[求助]关于多线程调试中遇到的一个疑问,请教大家
发表于: 2009-6-9 15:22 6241

[求助]关于多线程调试中遇到的一个疑问,请教大家

2009-6-9 15:22
6241
我们知道,Windows是一个抢占式多任务的操作系统,我的理解是:

[*]调度程序按线程为单位进行cpu调度
[*]优先级高的线程会立即抢到优先级低的线程的cpu
[*]相同优先级的线程会按时间片按次序获得cpu
我在开发时,经常发生这样的事:

在调试过程中,几个线程会绞在一起(没办法,我们的项目对并发要求比较高,常常有十几个线程),有时候导致整个系统动不了,不得不logoff,这似乎和Windows的调度策略矛盾了,为什么其它进程会得不到cpu呢,到底出了什么问题了呢?

这里高手比较多,而且都对系统了解比较深,如有知道的请赐教,谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
线程都卡在系统内核的函数里了吧。或者是有冲突的函数里,系统其他功能不得不等待。
感觉就是太多的功能都是系统函数实现的,而不是用户程序。估计线程抢占就不好用了吧。
再说你说系统不动了。是explorer不动了吧。系统应该还在运转。explorer的优先度好像不高。
没接触过,纯属猜想。呵呵
2009-6-9 16:18
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢!有道理

系统不动了指其他开的程序都不能用了,切换一下要等好久
还有taskmanager也非常慢,想杀掉vc都办不到

ctrl+alt+delete还有效,能够logoff,以前不知到,都是关电源的。
2009-6-9 16:47
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
等好久不等于不动了。呵呵

我以为是程序让系统慢了那。原来是vc

在调式状态下开10多个线程我感觉卡是正常的。不卡换cpu吧呵呵。
要是Release版本还是卡的话就是程序问题了。
毕竟vc对debug版本多填了好多调试代码用来追踪。要不你就换成Release调试试试,但好多功能都用不了。
2009-6-9 17:09
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
您可能理解错了,线程没有绞到一起是没问题的
那个慢不是一般的慢,和挂死没什么两样,
切换一下进程,不能保证一个小时能出来,可能您没有这个体会。

谢谢!
2009-6-9 17:27
0
雪    币: 229
活跃值: (483)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
我想你的程序是卡在一个线程里面去了..是不是互斥对象没有释放
2009-6-10 01:19
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
就算这样也不应该影响系统的调度吧?

我在想,莫非系统调度的那个时钟中断是可屏蔽的?好像也说不通。
2009-6-10 10:44
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
还有一种可能,就是vc将被调试的多线程程序的优先级提到了最高,而多线程程序又陷入了死锁,并且系统中只有【ALT+TAB】对应的那个进程和【CTRL+ALT+DEL】对应的进程拥有最高优先级,所以系统中只有这三个进程可以动了。
2009-6-10 11:00
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
如果在等待互斥对象,那应该不占CPU的吧?所以卡死的话,就应该还占着CPU,就好像用管理界面的线程来做后台工作一样
2009-6-10 11:50
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
应该不是在等互斥,而是线程之间以及调试器之间协调有了问题,进入了死循环吧?
2009-6-10 12:26
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
貌似是vc6版本的bug,   以后版本没听说有这个问题。
调试多线程程序时,切换线程经常切死, 界面上几乎没什么响应, 在任务管理器里看,CPU占用都很低,很正常,  我试过做了个快捷键, 一死掉就kill vc, 但是没什么用。
ps: 听说有高人做了个程序,hook在ctrl + alt + del 上, 按这个快捷键就kill vc........
2009-6-11 10:31
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
多谢!!!!!!
2009-6-11 10:47
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
找到了:
你试试这个
http://www.360doc.com/content/071210/15/38907_883977.html
2009-6-12 16:07
0
雪    币: 97
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
多谢!!!!!!!!!!!!!!
2009-6-12 16:48
0
游客
登录 | 注册 方可回帖
返回
//