记得在windows下有一个SuspendThread使线程挂起的函数,却发现linux下没有类似的函数,于是想自己写个。。
刚开始就想到用信号(没办法,正在看auep,只能想到这个)
test1:
用pthread_kill将SIGSTOP信号发送到要暂停的线程
期望结果:线程暂停
实际结果:进程暂停
结论:oh, shit,查了查书·信号是进程范围的,还有SIGSTOP是无法捕获的,失败·
于是,又想了个方法:
test2:
还有用信号,不过这次改用自定义的SIGUSR1(用于挂起)和SIGUSR2(用于唤醒)
在SIGUSR1处理函数中等待SIGUSR2信号就好了呀··
但问题就来了,书上信号是进程范围的,按照我的理解现进程中的所有线程应该都被挂起才是,
要是把处理函数中阻塞在这··,这程序不是不能跑了·
结论:想想都觉得不可能,所以就放弃了
接下来就是一番baidu,google,终于在一个论坛找到了(地址忘了),想法跟上面test2的基本一致,接下来就是依葫芦画瓢了,
有了下面的小程序,有问题希望不吝指出!!
总结:一、对signal的处理还不是很理解
1、signal是在接收的线程执行处理函数,不影响其它线程?
二、不要轻易放弃自己的想法,不要过早认定“这不可能的,绝对地”
三、东西不是think出来的,是do