找回密码
 注册
查看: 3807|回复: 9

如何让一个线程休眠,而进程继续RUN啊?

[复制链接]
发表于 2005-10-12 14:37:17 | 显示全部楼层 |阅读模式
各位大虾,我在一个程序里开了几个线程,其中几个线程在大多数时间里都是休眠的,因此我在线程里调用usleep来休眠,但我发现这样导致整个进程都休眠了。请问有什么函数是可以让其中一个线程休眠,而其他线程是继续跑的啊?谢谢。
发表于 2005-10-12 15:14:30 | 显示全部楼层
在线程里用usleep不会导致整个进程休眠。
用pthread_mutex_lock更好。
在线程里用
pthread_mutex_lock(x);
pthread_mutex_lock(x);
pthread_mutex_unlock(x);
就能把自己锁住,想继续往下执行就在主进程里解锁。
回复

使用道具 举报

发表于 2005-10-12 16:48:18 | 显示全部楼层
感觉用pthread_cond_wait也不错
回复

使用道具 举报

 楼主| 发表于 2005-10-12 18:39:18 | 显示全部楼层
但我只是想在线程里做一些延时啊,然后置一些标志,而主线程是在跑别的任务。
另外,linux有没有提供定时器函数可以直接调用的啊?谢谢。
回复

使用道具 举报

发表于 2005-10-12 20:07:58 | 显示全部楼层
你到底是想延时还是休眠?
回复

使用道具 举报

 楼主| 发表于 2005-10-12 21:30:14 | 显示全部楼层
[quote:926b5cf940="mozilla"]你到底是想延时还是休眠?[/quote]

都想知道啊。
我有几个线程是需要每隔一段时间做一些操作的,这些操作又不能放到主线程去做,只好开一个线程,但这些工作量很少,大概几百毫秒才需要执行一次,因此我想在执行完以后让这个线程休眠,这样就可以节省CPU资源啊。

我在其中一个线程了调用usleep,这样本来想释放CPU资源,让其他线程跑得好一点,但我发现这样做却导致了其他线程的有些操作超时了。相反我把usleep去掉,就在那里做死循环,反而其他线程的任务能够运行地好好的。

至于调用sleep会让整个进程休眠我是在书上看到的,但书上没有明确说usleep也会让整个进程休眠。不知道两个函数除了休眠时间外还有什么其他区别?
回复

使用道具 举报

发表于 2005-10-12 21:40:35 | 显示全部楼层
sleep和usleep放在线程里不会导致主进程休眠。
回复

使用道具 举报

发表于 2005-10-13 17:17:05 | 显示全部楼层
同意版斧的,进程应该不会休眠.如果这样就不要用usleep了.
用setitimer好了,usleep我用过,不太精确,楼主是需要定时的让所开的线程做操作吧
回复

使用道具 举报

 楼主| 发表于 2005-10-14 12:04:39 | 显示全部楼层
谢谢各位大虾指点。
回复

使用道具 举报

发表于 2005-10-14 13:51:48 | 显示全部楼层
因为linux以前并不是支持线程的内核,早期的线程都是通过一组特殊的系统
调用(具体名字忘了,可以获得设置进程上下文,更改栈指针)在用户空间
实现的,好处是内河开销小,缺点就是如楼主所说的某个线程调用了像usleep
那样的内核调用,进城空间中所有的线程都会被阻塞。

检查自己的系统吧,看看是否支持内核线程。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2025-2-7 20:03 , Processed in 0.033982 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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