#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int tab[2000];
pthread_t TH_begin;
pthread_t TH_end;
void search_From_begin(int val){
int i;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
for(i=0;i<2000;i++){
pthread_testcancel();
usleep(500);
if(tab[i]==val){
pthread_cancel(TH_end);
printf("search begin find it first\n");
}
}
printf("search begin not find it first\n"); }
void search_From_end(int val){
int i;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
for(i=2000;i>-1;i--){
pthread_testcancel();
usleep(500);
if(tab[i]==val){
pthread_cancel(TH_begin);
printf("search end find it first\n");
}
}
printf("search begin not find it first\n"); }
void main(){
int i,j;
for(i=0;i<2000;i++)
tab[i]=i;
do{
pthread_create(&TH_begin,NULL,&search_From_begin,j);
pthread_create(&TH_end,NULL,&search_From_end,j);
pthread_join(TH_begin,NULL);
pthread_join(TH_end,NULL);
}while(1);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KaW50IHRhYlsyMDAwXTsKcHRocmVhZF90IFRIX2JlZ2luOwpwdGhyZWFkX3QgVEhfZW5kOwp2b2lkIHNlYXJjaF9Gcm9tX2JlZ2luKGludCB2YWwpewoJaW50IGk7CglwdGhyZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSxOVUxMKTsKCWZvcihpPTA7aTwyMDAwO2krKyl7CgkKCSAgcHRocmVhZF90ZXN0Y2FuY2VsKCk7CgkgIHVzbGVlcCg1MDApOwoJICAKCSAgaWYodGFiW2ldPT12YWwpewoJICAJcHRocmVhZF9jYW5jZWwoVEhfZW5kKTsKCSAgCXByaW50Zigic2VhcmNoIGJlZ2luIGZpbmQgaXQgZmlyc3RcbiIpOwoJICAJCgkgIH0KfQoJcHJpbnRmKCJzZWFyY2ggYmVnaW4gbm90IGZpbmQgaXQgZmlyc3RcbiIpOwp9CnZvaWQgc2VhcmNoX0Zyb21fZW5kKGludCB2YWwpewoJaW50IGk7CglwdGhyZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSxOVUxMKTsKCWZvcihpPTIwMDA7aT4tMTtpLS0pewoJICBwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKCSAgdXNsZWVwKDUwMCk7CgkgIAoJICBpZih0YWJbaV09PXZhbCl7CgkgIAlwdGhyZWFkX2NhbmNlbChUSF9iZWdpbik7CgkgIAlwcmludGYoInNlYXJjaCBlbmQgZmluZCBpdCBmaXJzdFxuIik7CgkgIAkKCSAgfQp9CnByaW50Zigic2VhcmNoIGJlZ2luIG5vdCBmaW5kIGl0IGZpcnN0XG4iKTsKfQp2b2lkIG1haW4oKXsKCQoJaW50IGksajsKCWZvcihpPTA7aTwyMDAwO2krKykKCXRhYltpXT1pOwoJZG97CglwcmludGYoIkVudHJlciB2YWw6Iik7CglzY2FuZigiJWQiLCZqKTsKICBwdGhyZWFkX2NyZWF0ZSgmVEhfYmVnaW4sTlVMTCwmc2VhcmNoX0Zyb21fYmVnaW4saik7IAogIHB0aHJlYWRfY3JlYXRlKCZUSF9lbmQsTlVMTCwmc2VhcmNoX0Zyb21fZW5kLGopOyAKICBwdGhyZWFkX2pvaW4oVEhfYmVnaW4sTlVMTCk7IAogIHB0aHJlYWRfam9pbihUSF9lbmQsTlVMTCk7IAoJfXdoaWxlKDEpOwp9Cg==