永发信息网

Linux POSIX编程如何查询指定的线程是否阻塞

答案:3  悬赏:80  手机版
解决时间 2021-01-25 13:16
RT,我pthread_create之后,我想要等待它阻塞之后做一个动作
最佳答案
在主线程里面设置一个定时器,或者sleep()你需要的时间长度,timeout后,去进行pthread_kill操作:
int kill_rc = pthread_kill(thread_id,0);
if(kill_rc == ESRCH)
printf("the specified thread did not exists or already quit\n");
else if(kill_rc == EINVAL)
printf("signal is invalid\n");
else
printf("the specified thread is alive\n");
同时,子线程里面处理SIGKILL信号,signal(SIGKILL,sig_handler),如果当时还没有结束,就被强制结束了。
全部回答
楼上回答的已经很详细了,但是有一点疑问,阻塞不是描述线程的词汇是描述i/o的。
使用线程间通信,在才确定的代码位置使用mutex就可以完成你所要的功能。 线程互斥   互斥意味着“排它”,即两个线程不能同时进入被互斥保护的代码。Linux下可以通过pthread_mutex_t 定义互斥体机制完成多线程的互斥操作,该机制的作用是对某个需要互斥的部分,在进入时先得到互斥体,如果没有得到互斥体,表明互斥部分被其它线程拥有,此时欲获取互斥体的线程阻塞,直到拥有该互斥体的线程完成互斥部分的操作为止。   下面的代码实现了对共享全局变量x 用互斥体mutex 进行保护的目的: int x; // 进程中的全局变量 pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL); //按缺省的属性初始化互斥体变量mutex pthread_mutex_lock(&mutex); // 给互斥体变量加锁 … //对变量x 的操作 phtread_mutex_unlock(&mutex); // 给互斥体变量解除锁   线程同步   同步就是线程等待某个事件的发生。只有当等待的事件发生线程才继续执行,否则线程挂起并放弃处理器。当多个线程协作时,相互作用的任务必须在一定的条件下同步。   Linux下的C语言编程有多种线程同步机制,最典型的是条件变量(condition variable)。pthread_cond_init用来创建一个条件变量,其函数原型为: pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr);   pthread_cond_wait和pthread_cond_timedwait用来等待条件变量被设置,值得注意的是这两个等待调用需要一个已经上锁的互斥体mutex,这是为了防止在真正进入等待状态之前别的线程有可能设置该条件变量而产生竞争。pthread_cond_wait的函数原型为: pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);   pthread_cond_broadcast用于设置条件变量,即使得事件发生,这样等待该事件的线程将不再阻塞: pthread_cond_broadcast (pthread_cond_t *cond) ;   pthread_cond_signal则用于解除某一个等待线程的阻塞状态: pthread_cond_signal (pthread_cond_t *cond) ;   pthread_cond_destroy 则用于释放一个条件变量的资源。   在头文件semaphore.h 中定义的信号量则完成了互斥体和条件变量的封装,按照多线程程序设计中访问控制机制,控制对资源的同步访问,提供程序设计人员更方便的调用接口。 sem_init(sem_t *sem, int pshared, unsigned int val);   这个函数初始化一个信号量sem 的值为val,参数pshared 是共享属性控制,表明是否在进程间共享。 sem_wait(sem_t *sem);   调用该函数时,若sem为无状态,调用线程阻塞,等待信号量sem值增加(post )成为有信号状态;若sem为有状态,调用线程顺序执行,但信号量的值减一。 sem_post(sem_t *sem);   调用该函数,信号量sem的值增加,可以从无信号状态变为有信号状态。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中铁物流集团(商水袁老乡营业部)怎么去啊,我
【4r理论】作为分次照射理论基础的“4R”理论
怎样去除木板上的粘胶
维月美甲地址在什么地方,想过去办事
2月中到武汉待两天 想找个住的地方 能距离旅
【检验氯气的方法】氯气的检验方法如题
我的京豆已经超过1000还是不能用京豆,是京东
中铁物流集团(商水郝岗镇营业部)地址在什么地
现在过年,我还要在酒店上班,一天又要上10几
以下不是手机脱网的原因为()。
2017年发表论文费用
李商隐临死前写的最后一首诗是什么啊
单选题I________themtoyouassoonasth
甲客地址好找么,我有些事要过去
中铁物流集团(商水县舒庄乡营业部)地址在什么
推荐资讯
湛河区平顶山花堂公园里地址有谁知道?有点事
讲个污段子,不要污妖王的嘿嘿嘿,最污的采纳
用PS如何处理歪斜的照片
谁に痴汉しますか?
【在没有刀,勺子等任何利器的时候一个完整的
昌盛加油站(临泉镇柏树沟村)地址好找么,我有
甲公司为国有独资公司,因公司经营发展需要,
遇见怎么去啊,我要去那办事
用棉棒掏耳朵,掏过以后有点疼,第二天耳朵开
下列慢性宫颈炎的临床病理表现哪一项是错误的
新手求助 有关C语言的问题 #include <stdio.h
框架梁下部钢筋锚固与柱内相关
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?