社区
C语言
帖子详情
linux里挂起和唤醒指定线程?
zhouxinfengone
2009-03-09 11:06:39
用pthread编程的时候怎么挂起唤醒指定的线程?
比如有线程p1和方法F1,F2
只要调用方法F1就挂起线程p1假设p1是个死循环只是打印用的 然后调用F2就能继续唤醒p1打印 就这么简单的功能怎么实现的?用pthread_join好像不行 有好的方法吗?
...全文
1950
4
打赏
收藏
linux里挂起和唤醒指定线程?
用pthread编程的时候怎么挂起唤醒指定的线程? 比如有线程p1和方法F1,F2 只要调用方法F1就挂起线程p1假设p1是个死循环只是打印用的 然后调用F2就能继续唤醒p1打印 就这么简单的功能怎么实现的?用pthread_join好像不行 有好的方法吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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...
Linux
线程
挂起
与
唤醒
功能 实例
条件变量是利用
线程
间共享的全局变量进行同步的一种机制,主要包括两个动作:一个
线程
等待"条件变量的条件成立"而
挂起
;另一个
线程
使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁...
c++
linux
线程
等待与
唤醒
_
Linux
中
线程
的
挂起
与恢复(进程暂停)
故自己整理了一下程序流程为:主
线程
创建子
线程
(当前子
线程
状态为stop停止状态),5秒后主
线程
唤醒
子
线程
,10秒后主
线程
挂起
子
线程
,15秒后主
线程
再次
唤醒
子
线程
,20秒后主
线程
执行完毕等待子...
linux
线程
的
挂起
和
唤醒
#include #include #include #include using namespace std; pthread_t IDA; pthread_t IDB;...pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;...pthread_cond_t cond = PTHREAD_COND_INITIALIZER;...
c++
linux
线程
等待与
唤醒
_C++
线程
的创建、
挂起
、
唤醒
和结束 &&&& 利用waitForSingleObject 函数陷入死锁的问题解决...
最近在写一个CAN总线的上位机软件,利用CAN转USB的...//在创建
线程
的时候,将
线程
挂起
,
挂起
的
线程
可设置下面的m_bAutoDelete 等属性,再进行
线程
的
唤醒
m_pThread = AfxBeginThread(ReceiveThread,this,0,CREATE_SU...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章