abhidivster
BAN USERIn C it could be done directly I guess
#include<pthread.h>
#include<stdio.h>
void* run_dice(void*);
void* run_spade(void*);
void* run_hearts(void*);
void* run_clubs(void*);
void* run_dice(void* args) {
char* ch = (char*)args;
printf("Dice %c\n",*ch);
}
void* run_spade(void* args) {
char* ch = (char*)args;
printf("Spade %c\n",*ch);
}
void* run_hearts(void* args) {
char* ch = (char*)args;
printf("Hearts %c\n",*ch);
}
void* run_clubs(void* args) {
char* ch = (char*)args;
printf("Clubs %c\n\n",*ch);
}
int main() {
pthread_t tids[4];
char arr[]= {'A','B','C','D'};
int count;
scanf("%d",&count);
for(int i=0; i<count; i++) {
char ch = arr[i];
for(int j=0; j<4; j++) {
if(j == 0)
pthread_create(&tids[j],NULL,run_dice,&ch);
else if(j == 1)
pthread_create(&tids[j],NULL,run_spade,&ch);
else if(j == 2)
pthread_create(&tids[j],NULL,run_hearts,&ch);
else
pthread_create(&tids[j],NULL,run_clubs,&ch);
pthread_join(tids[j],NULL);
}
}
return 0;
}
#include<pthread.h>
- abhidivster May 26, 2015#include<stdio.h>
int num_threads=3;
int state=0;
pthread_cond_t cond;
pthread_mutex_t mutex;
void* threadA(void* args) {
int i;
for(i=0; i<5; i++){
pthread_mutex_lock(&mutex);
while(state == 1 || state == 2) pthread_cond_wait(&cond,&mutex);
printf("Thread A\n");
state = (state+1)%num_threads;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void* threadB(void* args) {
int i;
for(i=0; i<5; i++){
pthread_mutex_lock(&mutex);
while(state == 0 || state == 2)pthread_cond_wait(&cond,&mutex);
printf("Thread B\n");
state = (state+1)%num_threads;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void* threadC(void* args) {
int i;
for(i=0; i<5; i++){
pthread_mutex_lock(&mutex);
while(state == 1 || state == 0) pthread_cond_wait(&cond,&mutex);
printf("Thread C\n\n");
state = (state+1)%num_threads;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
int main() {
pthread_t tid[3];
pthread_cond_init(&cond,NULL);
pthread_mutex_init(&mutex,NULL);
pthread_create(&tid[0],NULL,threadA,NULL);
pthread_create(&tid[1],NULL,threadB,NULL);
pthread_create(&tid[2],NULL,threadC,NULL);
return 0;
}