Skip to content
Extraits de code Groupes Projets
run.h 1,93 ko
Newer Older
  • Learn to ignore specific revisions
  • Laurent Paucot's avatar
    Laurent Paucot a validé
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    #include <semaphore.h>
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    #define uint_64 unsigned long long
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    int N; 
    //travailler avec des linkendList
    typedef struct node{ 
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        uint_64 value;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        struct node *next;
    }node_t;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    typedef struct queue{ 
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        struct node *tail;
        int size;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int final;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    }queue_t;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    struct buffer_rc{
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        char **tab;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int size;       
        int len;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int head;
        int tail;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        FILE *file1;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    struct buffer_cw
    {
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        queue_t **tab;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int size;       
        int len;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int head;
        int tail;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        FILE *file2;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    };
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    struct buffer_rccw{
        struct buffer_rc *struct1;
        struct buffer_cw *struct2; 
    };
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    /* sémaphore est une structure de donné qui contient :
        *un entier qui stocke la valeur, positive ou nulle du sémaphore.
        *une queue qui contient les pointeurs vers les threads
    */
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    pthread_mutex_t mutex1;
    sem_t empty1;
    sem_t full1;
    
    pthread_mutex_t mutex2;
    sem_t empty2;
    sem_t full2;
    
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    void put_in_buffer_1(char *c, struct buffer_rc *ptr);
    char *get_from_buffer_1(struct buffer_rc *ptr);
    void put_in_buffer_2(struct queue *ptr, struct buffer_cw *buf);
    queue_t *get_from_buffer_2(struct buffer_cw *buf);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    int is_div(uint_64 number, uint_64 i);
    uint_64 modpow (uint_64 base, uint_64 exp, uint_64 mod);
    uint_64* randomiser (int k, uint_64 N);
    int is_prime(uint_64 number);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    void enqueue(queue_t* q, uint_64 val);
    queue_t* prime_divs(uint_64 number);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    void *reading (void *param);
    void *calculating(void *param);
    void *writing(void *param);
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    void sem_1_initializer(struct buffer_rc *buf);
    void sem_2_initializer (struct buffer_cw *buf);
    
    struct buffer_rc * buff_init_1(FILE *file1);
    struct buffer_cw * buff_init_2(FILE *file2);
    struct buffer_rccw *buff_init_12(struct buffer_rc *ptr1,struct buffer_cw *ptr2);
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    int thread_create_join(struct buffer_rc *ptr1,struct buffer_cw *ptr2,struct buffer_rccw *ptr3);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    void mut_sem_destroy(void);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    int run (char *input,char *output,int n_threads);