| #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 );那为什么会出错呢?求高人解答
 |