当前位置: 技术问答>linux和unix
pthread多线程问题
来源: 互联网 发布时间:2016-12-22
本文导语: 主线程里创建2个线程,pthread_t tid1,tid2; 2个线程均是while(1),且都是用默认初始化 两个线程同步运行,主线程运行一段时间后要将tid1和tid2结束,且tid2比tid1延迟10s结束,怎么实现?? pthread_kill(tid1, SIGSTOP); //SIGKI...
主线程里创建2个线程,pthread_t tid1,tid2; 2个线程均是while(1),且都是用默认初始化
两个线程同步运行,主线程运行一段时间后要将tid1和tid2结束,且tid2比tid1延迟10s结束,怎么实现??
pthread_kill(tid1, SIGSTOP); //SIGKILL或者pthread_cancel(tid1)都不行啊
sleep(10);
pthread_kill(tid2, SIGSTOP);
以上代码执行不能达到预期,求高手指点。。。
两个线程同步运行,主线程运行一段时间后要将tid1和tid2结束,且tid2比tid1延迟10s结束,怎么实现??
pthread_kill(tid1, SIGSTOP); //SIGKILL或者pthread_cancel(tid1)都不行啊
sleep(10);
pthread_kill(tid2, SIGSTOP);
以上代码执行不能达到预期,求高手指点。。。
|
#include
#include
#include
#include
using namespace std;
pthread_t thread1,thread2;
void * th1_fun(void *);
void * th2_fun(void *);
void sig_alarm(int signo);
bool kill_thread2=false;
int main()
{
//开启两个线程
pthread_create(&thread1,NULL,th1_fun,NULL);
pthread_create(&thread2,NULL,th2_fun,NULL);
sleep(5);//使两个线程有机会运行起来
//do something here
pthread_cancel(thread1);//向1号线程发送取消信号,要求1号线程终止
signal(SIGALRM,sig_alarm);
alarm(10);//10s后由信号处理程序终止2号线程
for(; ;)
;
return 0;
}
void * th1_fun(void *)
{
pthread_detach(pthread_self());//分离自己,不需要主线程等待
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);//允许线程取消,其实新建线程默认就是这个属性。
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);//收到取消信号后,立即终止自己。
while(1)
{
cout