社区
C语言
帖子详情
linux里挂起和唤醒指定线程?
zhouxinfengone
2009-03-09 11:06:39
用pthread编程的时候怎么挂起唤醒指定的线程?
比如有线程p1和方法F1,F2
只要调用方法F1就挂起线程p1假设p1是个死循环只是打印用的 然后调用F2就能继续唤醒p1打印 就这么简单的功能怎么实现的?用pthread_join好像不行 有好的方法吗?
...全文
1762
4
打赏
收藏
linux里挂起和唤醒指定线程?
用pthread编程的时候怎么挂起唤醒指定的线程? 比如有线程p1和方法F1,F2 只要调用方法F1就挂起线程p1假设p1是个死循环只是打印用的 然后调用F2就能继续唤醒p1打印 就这么简单的功能怎么实现的?用pthread_join好像不行 有好的方法吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhouxinfengone
2009-03-09
打赏
举报
回复
关键 我只是需要在这个线程外部挂起这个 线程 并不希望它退出 也不会设计到共享资源的问题 只是希望能挂起和唤醒指定的线程而已 不能在线程内部让他自己挂起这个是最主要的!!
猫已经找不回了
2009-03-09
打赏
举报
回复
楼上互斥锁的办法不错,Unix高级编程上有样例程序,建议楼主拿书来看看.
猫已经找不回了
2009-03-09
打赏
举报
回复
一个简单的问题被你想复杂了.
主线程需要的时候就调用打印用的子线程,让子线程绑定的函数循环打印.
你觉得需要结束了,就在主线程里调用pthread_cancel();结束子线程.
wuyu637
2009-03-09
打赏
举报
回复
Condition Variable (条件变量)
也是一种用于同步的device. 允许一个进程(或线程)将自己挂起等待一个条件变量的状态
被改变.
有下列几个函数:
int pthread_cond_init (pthread_cond_t *COND,pthread_condattr_t *cond_ATTR);
int pthread_cond_signal (pthread_cond_t *COND);
int pthread_cond_broadcast (pthread_cond_t *COND);
int pthread_cond_wait (pthread_cond_t *COND, pthread_mutex_t *MUTEX);
int pthread_cond_timedwait (pthread_cond_t *COND, pthread_mutex_t *MUTEX, const struct timespec *ABSTIME);
int pthread_cond_destroy (pthread_cond_t *COND);
我想看看名字就可以知道它们的用途了. 通常我们也使用静态变量来初始化一个条件变量.
Example:
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_cond_signal 用于唤醒一个被锁定的线程.
pthread_cond_broadcast 用于唤醒所有被锁定的线程.
pthread_cond_wait 用于等待.
为了解决竞争问题(即一个线程刚要去wait而另一个线程已经signal了), 它要与一个mutex连用.
看一看下面的典型的例子。
假设x、y这两个变量被多个线程共享,我们希望这个线程一直等到x和y相等才继续执行这个线程。典型的忙等待方法如下(这是一个错误的方法):
while( x != y );
下面是使用条件变量正确的方法:
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
//Waiting until X is the same as Y is performed as follows:
pthread_mutex_lock(&mut);
while (x != y) {
pthread_cond_wait(&cond, &mut);
}
/**//* operate on x and y */
pthread_mutex_unlock(&mut);
pthread_cond_wait的执行过程如下:
1. 首先, 它unlock the mutex, then 挂起当前的线程.
2. 当被唤醒的时候, 它会lock the mutex.
这样就保证了这是一个临界区.
linux
线程
挂起
与
唤醒
,在
linux
中如何让子
线程
挂起
、
唤醒
?
就像windows
里
的suspend、resume那样|用信号量来控制吧,suspend用sem_waitresume用sem_post|#include#includestaticvoidsig_proc(int);pid_tchld_pid;intmain(void){intflag=0;if((chld_pid=fork())==0){if(signal(SIGAL...
c++
linux
线程
等待与
唤醒
_
Linux
中
线程
的
挂起
与恢复(进程暂停)
http://www.
linux
idc.com/
Linux
/2013-09/90156.htm今天在网上查了一下
Linux
中对进程的
挂起
与恢复的实现,相关资料少的可怜,大部分都是粘贴复制。也没有完整详细的代码。故自己整理了一下程序流程为:主
线程
创建子
线程
(当前子
线程
状态为stop停止状态),5秒后主
线程
唤醒
子
线程
,10秒后主
线程
挂起
子
线程
,15秒后主
线程
再次
唤醒
子
线程
,20秒后主
线程
执行完毕等待子...
Linux
线程
挂起
与
唤醒
功能 实例
pthread_cond_wait 多
线程
的条件变量 条件变量是利用
线程
间共享的全局变量进行同步的一种机制,主要包括两个动作:一个
线程
等待"条件变量的条件成立"而
挂起
;另一个
线程
使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 创建和注销 条件变量和互斥锁一样,都有静态动态两种创建方式,静态方式使用PTHREAD_COND_INI
c++
linux
线程
等待与
唤醒
_C++
线程
的创建、
挂起
、
唤醒
和结束 &&&& 利用waitForSingleObject 函数陷入死锁的问题解决...
最近在写一个CAN总线的上位机软件,利用CAN转USB的设备连到电脑上,进行数据的传输。在接收下位机发送的数据的时候采用的在
线程
中持续接收数据。1、在连接设备的函数中,开启
线程
。//在创建
线程
的时候,将
线程
挂起
,
挂起
的
线程
可设置下面的m_bAutoDelete 等属性,再进行
线程
的
唤醒
m_pThread = AfxBeginThread(ReceiveThread,this,0,CREATE_SU...
C++多
线程
编程——
线程
的
挂起
、
唤醒
与终止
C++多
线程
编程——
线程
的
挂起
、
唤醒
与终止 (2010-10-11 10:09:04) 转载▼ 标签: 杂谈 分类:Win32 在
线程
创建并运行后,用户可以对
线程
执行
挂起
和终止操作.所谓
挂起
,是指暂停
线程
的执行,用户可以通过气候的
唤醒
操作来恢复
线程
的执行.
线程
终止是指结束
线程
的运行.系统提供了SuspendThread,ResumeThrea
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章