1112 Subj : Re: nptl and signals To : comp.programming.threads From : divijbhatt@gmail.com Date : Wed Jul 27 2005 04:08 am Hi, Dear this is what I want to do void myflag(int sig) { sem_wait(&mysem); int ret; { printf("sgwait failed %d",ret); exit(0); } (void)time(&timeval); int s=0,mysig; int k =(int)pthread_getspecific(key); printf("In signal K:%d and thread id is:%lu time taken:->%s\n",k,pthread_self(),ctime(&timeval)); switch(k) { case 0: printf("I am the main thread\t \n"); break; case 1: cnt1=cnt1+1; break; case 2: cnt2=cnt2+1; break; case 3: cnt3=cnt3+1; break; } printf("cnt1:%d\t cnt2:%d\t cnt3:%d\t",cnt1,cnt2,cnt3); sem_post(&mysem); return; } void *mytimer(void *argv) { int interval,ret,mysig; pthread_mutex_lock(&mylock); interval = *(int *)argv; free(argv); switch(interval) { case 1: value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0; value.it_value.tv_sec = 1; value.it_value.tv_usec = 0; setitimer(which,&value,NULL); ret=pthread_setspecific(key,(void *)1); if(ret!=0) {printf("Value cann't set\n"); exit(0); } break; case 2: value.it_interval.tv_sec = 2; value.it_interval.tv_usec =0; value.it_value.tv_sec = 1; value.it_value.tv_usec = 0; setitimer(which,&value,NULL); ret=pthread_setspecific(key,(void *)2); if(ret!=0) {printf("Value cann't set\n"); exit(0); } break; case 3: value.it_interval.tv_sec = 3; value.it_interval.tv_usec = 0; value.it_value.tv_sec = 1; value.it_value.tv_usec = 0; setitimer(which,&value,NULL); ret=pthread_setspecific(key,(void *)3); if(ret!=0) { printf("Value cann't set\n"); exit(0); } break; } pthread_mutex_unlock(&mylock); while(1); } int main() { int ret,*q,status,i=0; long int in; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); memset(&mask,0,sizeof(mask)); sigemptyset(&mask); sigaddset(&mask,SIGALRM); signal(SIGALRM,&myflag); ret = sem_init(&mysem,0,1); if(ret!=0){ printf("Semaph. cann't Initialize"); exit(0); } ret=pthread_key_create(&key,NULL); if(ret!=0) { printf("Cann't create the key"); exit(0); } else printf("Key is created\n"); ret=pthread_sigmask(SIG_BLOCK,&mask,NULL); if(ret!=0){ printf("Error in sigmask"); exit(0); } for(i=0;i