- 论坛徽章:
- 0
|
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
void CleanUp( void *arg )
{
printf( "cleanup %s\n", (char *)arg );
}
void *Thr1( void *arg )
{
pthread_cleanup_push( CleanUp, "thread 1 cleanup done\n" );
printf( "thread 1 push done\n" );
if( arg )
pthread_exit( (void *)2 );
else
return ( (void *)1 );
pthread_cleanup_pop( 0 );
}
void *Thr2( void *arg )
{
pthread_cleanup_push( CleanUp, "thread 1 cleanup done\n" );
printf( "thread 1 push done\n" );
if( arg );
pthread_cleanup_pop( 0 );
else
pthread_cleanup_pop( 1 );
pthread_exit( (void *)2 );
}
int main( int argc, char **argv )
{
pthread_t tid1, tid2, tid3, tid4;
void *tret;
pthread_create( &tid1, NULL, Thr1, (void *)0 );
pthread_create( &tid2, NULL, Thr1, (void *)1 );
pthread_create( &tid3, NULL, Thr2, (void *)0 );
pthread_create( &tid4, NULL, Thr2, (void *)1 );
pthread_join( tid1, &tret );
pthread_join( tid2, &tret );
pthread_join( tid3, &tret );
pthread_join( tid4, &tret );
exit( 0 );
}
程序编译不通过,出错原因是Thr2中if语句那一部分有问题,但是从push和pop要匹配使用的要求来看,Thr2的却只会执行pthread_cleanup_pop( 0 );或者pthread_cleanup_pop( 1 );那为什么会出错呢?求高人解答 |
|