niedziela, 2 września 2018

pthread_create, pthread_join (gcc)

vim three_creads.c

#include <math.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define max 100
struct int_params
{
 int int_value;
 int count;
};
struct double_params
{
 double double_value;
 int count;
};
struct char_params
{
 char char_value;
 int count;
};

int *int_tab;
char *char_tab;
double *double_tab;



void init_Tables()
{

 int i;
 int_tab=(int*) calloc (max,sizeof(int));
 char_tab=(char*) calloc(max,sizeof(char));
 double_tab=(double*) calloc(max,sizeof(double));
 for(i=0;i<max;i++)
 {
     int_tab[i]=i+1;
     char_tab[i]='=';
     double_tab[i]=sqrt(1.*int_tab[i]);
 }


}

void delete_Tables()
{
    free(double_tab);
    free(char_tab);
    free(int_tab);
}
void *int_Print(void *value)
{
    int i;
    struct int_params *temp=(struct int_params*) value;
    for(i=0;i<temp->count;i++)
    {
        printf("%d ",temp->int_value);
        printf("\n");
    }
   
    return NULL;
}

void *char_Print(void *value)
{
    int i;
    struct char_params *temp=(struct char_params*) value;
    for(i=0;i<temp->count;i++)
    {
     printf("%c ",temp->char_value);
     printf("\n");
    }
    return NULL;
}
void *double_Print(void *value)
{
    int i;
    struct double_params *temp=(struct double_params*) value;
    for(i=0;i<temp->count;i++)
    {
     printf("%.2f ",temp->double_value);
     printf("\n");
    }
    return NULL;
}


pthread_t int_id,char_id,double_id;

int main()
{
    int i;                
    init_Tables();
    struct int_params i_P[max];
    struct char_params c_P[max];
    struct double_params d_P[max];
    for(i=0;i<max;i++)
    {
        i_P[i].int_value=int_tab[i];
        i_P[i].count=max;
        c_P[i].char_value=char_tab[i];
        c_P[i].count=max;
        d_P[i].double_value=double_tab[i];
        d_P[i].count=max;
    }
    pthread_create(&int_id,NULL,&int_Print,&*i_P);
    pthread_create(&char_id,NULL,&char_Print,&*c_P);
    pthread_create(&double_id,NULL,&double_Print,&*d_P);
   
    pthread_join(int_id,NULL);
    pthread_join(char_id,NULL);
    pthread_join(double_id,NULL);

    delete_Tables();

 return 0;
}


gcc -o three_creads three_creads.c -lpthread -lm

Brak komentarzy:

Prześlij komentarz