关于临界区变量的疑问?

mexiang 2010-06-09 02:22:13
DELPHI里线程之间用临界区变量来进行线程之间的数据保护,我的疑问是,临界区里的数据也是进行CPU时间轮换的吗?一般一个线程的CPU时间是如何进行分配的。如果临界区的数据执行时间远远大于CPU轮换时间,会不会导致其他线程一直死锁状态。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
临界区只是保证其中的代码串行化(不能重入),并非不能在中间切换线程。
nevercomenevergogo 2010-06-09
  • 打赏
  • 举报
回复
从互斥角度看,如果一个线程获得某个资源而不释放,此时其他线程若想获得该资源,这些线程均会处于阻塞状态。假设第一个线程永远不释放资源,那么就发生了死锁。

即使cpu轮询这几个线程,这跟死锁应该不会有直接关系。
CPU轮询这几个线程,只是说有机会给每个线程以CPU资源来运行,至于你的运行时阻塞还是非阻塞,cpu不关心的。
lengfengxiaodao 2010-06-09
  • 打赏
  • 举报
回复

一般一个线程的CPU时间是如何进行分配的,
-----------------------------------------
这是由操作系统决定的,WINDOWS用的是抢先式的分配方法,
单核CPU下, 每次只可能有一个线程在运行,线程运行后,才有可能进入临界区,如果别的线程临界区没有退出,则要进入临界区的线程处于等待状态。
临界区在进入,退出状态切换时也是需要时间的,但是都很小的,一般不考虑

如果临界区的数据执行时间远远大于CPU轮换时间,会不会导致其他线程一直死锁状态。
------------------------------------------------------
只有你的其中一个线程进入了没有退出,其他线程永远无法进入的
slmax1 2010-06-09
  • 打赏
  • 举报
回复
给你顶一下,等高手来理论性回答

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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