Two threads in the program alternately print even and odd numbers till 100. I have tried this and it worked. Is there a way to access the value of the shared data inside main and terminate the 2 threads when the value reaches 100
#include<stdio.h> #include<pthread.h> pthread_t tid[2]; unsigned int shared_data = 0; pthread_mutex_t mutex; unsigned int rc; //prototypes for callback functions void* PrintEvenNos(void*); void* PrintOddNos(void*); void main(void) { pthread_create(&tid[0],0,&PrintEvenNos,0) pthread_create(&tid[1],0,&PrintOddNos,0); sleep(3); pthread_join(tid[0],NULL); pthread_join(tid[1],NULL); } void* PrintEvenNos(void *ptr) { pthread_mutex_lock(&mutex); do { if(shared_data%2 == 0) { printf("Even:%dn",shared_data); shared_data++; } else { rc=pthread_mutex_unlock(&mutex);//if number is odd, do not print, release mutex } } while(shared_data <= 100); } void* PrintOddNos(void* ptr1) { rc = pthread_mutex_lock(&mutex); do { if(shared_data%2 != 0) { printf("odd:%dn",shared_data); shared_data++; } else { rc = pthread_mutex_unlock(&mutex);//if number is even, do not print, release mutex } } while(shared_data <= 100); }
Advertisement
Answer
There were few errors, in the code I posted earlier, I corrected those mistakes and this program prints even and odd values from 0 to 100, I have tried it.
#include<stdio.h> #include<pthread.h> pthread_t tid[2]; unsigned int shared_data = 0; pthread_mutex_t mutex; unsigned int rc; //prototypes for callback functions void* PrintEvenNos(void*); void* PrintOddNos(void*); void main(void) { pthread_create(&tid[0],0,&PrintEvenNos,0); pthread_create(&tid[1],0,&PrintOddNos,0); sleep(3); pthread_join(tid[0],NULL); pthread_join(tid[1],NULL); } void* PrintEvenNos(void *ptr) { rc = pthread_mutex_lock(&mutex); do { if(shared_data%2 == 0) { printf("Even:%dn",shared_data); shared_data++; } else { rc=pthread_mutex_unlock(&mutex);//if number is odd, do not print, release mutex } } while (shared_data <= 100); } void* PrintOddNos(void* ptr1) { rc = pthread_mutex_lock(&mutex); do { if(shared_data%2 != 0) { printf("odd:%dn",shared_data); shared_data++; } else { rc = pthread_mutex_unlock(&mutex);//if number is even, do not print, release mutex } } while (shared_data <= 100); }