LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1592|回复: 6

求助:如何在Linux下suspend一个线程?

[复制链接]
发表于 2006-11-1 10:55:57 | 显示全部楼层 |阅读模式
我设计了一个多线程的程序,现在有需求suspend几个线程.我不想使用sem、mutex、condition等任何的锁机制来suspend这几个线程.原因是太浪费资源.

我知道posix标准中,是不提供suspend一个线程的操作的(担心出现死锁),但各个操作系统却实现了该操作,可似乎Linux中没有实现.(我查看了pthread.h,没有发现任何类似Windows下的SuspendThread()的函数)

目前已经做的努力:
尝试用pthread_kill向该线程发送SIGSTOP的信号,结果却让我的整个程序退出了执行!

不知各位大虾有什么方法可以解决这个问题?
 楼主| 发表于 2006-11-1 11:18:53 | 显示全部楼层
补充一点:我的线程属性是:
调度策略是SCHED_RR;
运行的scope是PTHREAD_SCOPE_SYSTEM;
状态是PTHREAD_CREATE_DETACHED.
回复 支持 反对

使用道具 举报

发表于 2006-11-1 12:05:49 | 显示全部楼层
我不想使用sem、mutex、condition等任何的锁机制来suspend这几个线程.原因是太浪费资源.
怎么个浪费法?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-1 13:38:11 | 显示全部楼层
先描述一下我开发的项目的任务分工:我们项目组除了我以外,全部开发上层的应用;而我则为他们封装线程的一系列操作(因为有共性).现在有需求要我提供suspend某个线程的操作.

之所以说,锁机制太浪费是因为sem和mutex等都需要为sem_t和pthread_mutex_t等结构分配内存.因为我不知道哪个线程会被suspend,而且不是每个线程都会被suspend,所以用静态分配的方式为每个线程预留空间,会浪费大量内存.如用动态的方式,则担心由于频繁的malloc和free导致内存碎片太多.

所以请教各位大虾,有什么比较好的方法,在Linux下suspend一个线程?
回复 支持 反对

使用道具 举报

发表于 2006-11-1 14:02:14 | 显示全部楼层
好像只有线程自己挂起的api,比如pause和sigsuspend

难道你一次开成千上万个线程么?怎么会浪费大量内存

你可以弄一个标志变量,在线程内部检查这个变量,然后自己调用pause或者sigsuspend
需要唤醒的时候就给他发个信号
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-1 15:36:58 | 显示全部楼层
是,线程的数量不可预知,设计之初是支持百数量级(不会超过4096).不过还是感谢你提供的一些方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-1 16:30:35 | 显示全部楼层
刚刚测试了一下你的方法,运用pause.结果让整个进程全部挂起了,难道pause的影响是全局性的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表