|
|
|
|
 问一个多线程编程的问题 - zhengdalx [ 2005-03-27 23:14 | 339 byte(s)]
 Re: 问一个多线程编程的问题 - zhengdalx [ 2005-03-28 23:42 | 1,731 byte(s)]
 Re: 问一个多线程编程的问题 - vxworkslinux [ 2005-03-29 10:52 | 42 byte(s)]
 Re: 问一个多线程编程的问题 - zhengdalx [ 2005-03-29 12:35 | 222 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
用pthread_cancel终止一个线程怎么经常没有办法正常的终止一个线程
我观察了一下,有以下情况似乎会出问题:
有两个线程A,B,
线程A执行pthread_cancel(),想终止线程B
调度到线程B执行
线程B被终止
线程A调用pthread_join(),线程A永远被阻塞
取消一个线程的时候是不是需要做什么特殊的操作的?
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
我的那个程序与下面的模拟程序差不多,不知道为什么cancel的时候老出错
#include <iostream>
using namespace std;
#include <pthread.h>
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void *thread_run(void *)
{
cout<<"------------thread start"<<endl;
//pthread_cond_signal(&cond);
int state;
while(true){
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE , &state);
cout<<"-----------thread loop"<<endl;
for(int i=0 ; i < 10000 ; i++);
cout<<"----------start to sleep"<<endl;
pthread_setcancelstate(state , &state);
sleep(1);
}
}
int main()
{
for(int i=0 ; i < 1000 ; i++){
pthread_t id;
cout<<"create a thread"<<endl;
pthread_create(&id , NULL , thread_run , NULL);
//cout<<"wait for the new thread to run"<<end;
//pthread_cond_wait(&cond , &mutex);
cout<<"cancel a thread"<<endl;
pthread_cancel(id);
void *reval;
cout<<"wait for a thread to die"<<endl;
pthread_join(id , &reval);
cout<<endl<<endl;
}
}
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
那为什么有时候join没问题,有时候join的话就被永远阻塞了?
而且如果是调用pthread_cancel的话难道是不需要调用pthread_join的吗?
我这里的线程是joinable的,而且我是想等被cancel的线程完全退出以后才运行其他的部分
|
|
|
[Original]
[Print]
[Top]
|
|
|