什么情况下 应该挂起线程

johnlxi 2008-09-24 07:59:36
一般的实现中,会在什么情况下挂起线程,

我实现了一个线程,其中会循环处理一个list中的数据,list中数据的增删操作是在线程外完成的,这样就有可能在线程的循环过程中出现list中没有数据的情况,想请教一下,这个时候是不是应该将线程挂起,直到有添加数据的操作执行,在恢复线程

希望能说的详细一点,谢谢。另外像windows里面的消息循环,不知道在这方面是怎么处理的?
...全文
270 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnlxi 2008-09-25
  • 打赏
  • 举报
回复
深受启发,再请教一下在linux下线程阻塞实现的问题,通常用pthread_mutex_lock还是用pthread_cond_wait实现线程的阻塞,那种方式比较好呢,

我觉的mutex用起来比较简单,但是通常都用来保护数据,单纯的拿来做线程阻塞不知道有没有什么问题。
appleorchard2000 2008-09-24
  • 打赏
  • 举报
回复
晕,打错。纯种改为线程。妈的五笔。
appleorchard2000 2008-09-24
  • 打赏
  • 举报
回复
纯种的主要状态有运行态,就绪态和阻塞态。挂起态对纯种没有什么意义,这是由于此类状态是一个进程级的概念。特别地,如果一个进程被换出,由于它的所有纯种都该进程的地址空间,因为它们必须都被换出。
进程的挂起是由于I/o跟不上处理器的速度,I/o已被占用,那么下一个请示I/o的进程阻塞,如此如此,当就绪队列中没有进程时(全部阻塞),则挂起某个阻塞进程的一部分或全部内容。

阻塞与挂起是两码事。挂起需要把进程的数据换出到磁盘中,你的问题个人认为是应该把线程变成阻塞状态等待。
johnlxi 2008-09-24
  • 打赏
  • 举报
回复
时间片用完了应该是cpu自动进行调度将线程挂起的吧?

我说其实是第二种情况,就是资源不满足,但是这种情况下是不是也可以不执行处理的代码,直接进入下一次循环,中间加个sleep(0)什么的,但是这样会不会比较浪费cpu资源



独孤过儿 2008-09-24
  • 打赏
  • 举报
回复
1、时间片用完了

2、需要的资源当前不满足,被阻塞了

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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