Program to create histogram using threading in C language

#include
#include
#include

int a[100], size, N;
int min, max;
int grno;
float grsize;
int histo[50];

int start=0;
pthread_mutex_t lock;
pthread_cond_t cond;

void * work()
{
int i, temp;

pthread_mutex_lock(&lock);
if(start==0)
pthread_cond_wait(&cond, &lock);
pthread_mutex_unlock(&lock);

for(;;)
{
pthread_mutex_lock(&lock);
i=size-1;
size--;
pthread_mutex_unlock(&lock);

if(size<0) { pthread_mutex_lock(&lock); pthread_cond_wait(&cond, &lock); pthread_mutex_unlock(&lock); } if(i<0) break; if(min>a[i])
min=a[i];
if(max<0) break; temp=(float)((a[i]-min))/grsize; if(temp >(grno-1))
temp= grno-1;
histo[temp]++;
}
}

int main()
{
pthread_t id;
void * status;
int i, nthread;
int temp1, temp2;

pthread_mutex_init(&lock,0);
pthread_cond_init(&cond,0);

printf("Enter the size of the array :: ");
scanf("%d",&size);
N=size;

printf("\nEnter the %d elements of array\n",N);
for(i=0;i=0)
sleep(1);

grsize=(float)(max-min)/(float)grno;
size=N;

pthread_mutex_lock(&lock);
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&lock);


while(size>=0)
sleep(1);

pthread_join(id,status);

printf("\nThe histogram is as follows::\n");
temp1=min;
temp2=ceil(grsize);

for(i=0;i %d = %d\n",temp1, temp2,histo[i]);
temp1=temp2+1;
temp2+=ceil(grsize);
}
else
printf("For %d and up values = %d ",temp1, histo[i]);
}

pthread_mutex_destroy(&lock);

printf("\n");
return 0;
}







OUTPUT:

--------
Enter the size of the array :: 4

Enter the 4 elements of array
1
2
3
4

Enter the total number of groups required in histogram :: 4

Enter the total number of threads :: 3

The histogram isas follows::
For 1 -> 1 = 1
For 2 -> 2 = 1
For 3 -> 3 = 1
For 4 and up values = 1

No comments:

Post a Comment