Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Projet_Q4_Groupe_O4
## Description des fichiers :
@fonctions.h
Un fichier header qui reprend les structures utilisées pour les listes chaînées ainsi que les nom
des fonctions utilisées dans fonctions.c
@fonctions.c
Un fichier avec l'implémentation des différentes fonctions décrites dans le fichier header.
Dans celui-ci, il y a les fonctions liées aux listes chaînées, une fonction pour trouver les
diviseurspremiers d'un nombre donné, une fonction comptant les listes d'un fichier et des fonctions
pour initialiser les 2 buffers.
@main.c
Le code source à compiler pour obtenir le programme
@test.c
Un fichier reprenant les tests unitaires de nos fonctions
@Makefile
Le fichier reprenant les commandes à executer pour lancer le code de façon plus agréable
## Lancer le code :
- make fact : produit l'exécutable "fact"
- make cpp / make cpp_xml : compile le programme et analyse ou donne le rapport d'analyse avec cppcheck
- make val / make val_xml : compile le programme et analyse ou donne le rapport d'analyse avec valgrind
- make test : compile le programme et exécute les test unitaires
- make clean : nettoie le dossier et supprime les exécutables créés
- ./fact -N nthreads input.txt output.txt : lance le programme exécutable fact
* nthreads : le nombre de threads du programme, un entier >= 1
* input.txt : le nom du fichier input ayant des lignes d'entiers compris entre 2 et 2^(31)-1
* output.txt : le nom du fichier output qui est créé si il n'existe pas encore
## Architecture du code :
Notre code est découpé en 3 parties :
1) Lecture (1 thread ) : lit les lignes du fichier input et en stock les entiers dans le buffer_1
2) Calcul (n threads) : prend les entiers du buffer_1, calcul la liste des diviseurs premiers de l'entier
et stock cette liste d'entiers dans le buffer_2
3) Ecriture (1 thread ) : prend les listes d'entiers du buffer_2 et les écrit dans le fichier output
Les 2 buffers sont protégés par 1 mutex et 2 sémaphores (free et full) chacun
## Bon fonctionnement :
Pour un bon fonctionnement du code, il faut respecter quelque règles :
1) Le fichier input doit être composé de lignes ne comportant que des entiers compris entre 2 et 2^(31)-1
avec un seul entier par ligne
2) Le nombre de thread(s) doit être précisé et doit être >= 1
3) Pour un bon fonctionnement de valgrind, il faut que le fichier "example_input.txt" soit dans le même dossier
que le Makefile
# Projet_Q4_Groupe_O4