Bonjour, je suis sur un projet pour les cours. On doit réaliser un système de lecteurs écrivains :
Des requêtes (lecture ou écriture) arrivent, et elles doivent être insérées dans une file d'attente avant d'être traitées par le lancement d'un thread lecteur ou écrivain.
Dans ma modélisation, je lance deux threads générateurs de requêtes (le premier génère des demandes de lectures, l'autre... des écritures). Les générateurs communiquent avec main() via un tableau que j'ai appelé BOITE (les générateurs remplissent la boite, le main la vide dans la file d'attente). La file d'attente est une liste chaînée.
Bon, j'en ai fini pour le pitch, voici mon code.
L'heure du crime
Comme vous pouvez le voir, j'ai mis NB_QUERIES à 500, et parfois j'obtiens une segmentation fault :
Et voici ce que dit gdb :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 E118 ecrit L119 lit L120 lit E121 ecrit E122 ecrit E123 ecrit E125 ecrit Segmentation fault
Bref, je me doute que le problème est dû au nombre très important de threads, mais je ne vois pas trop comment le résoudre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 L204 lit L205 lit E206 ecrit E207 ecrit L209 lit Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0xb6b25070 [Switching to process 478 thread 0xee03] 0x90e35548 in pthread_getspecific ()
Merci de votre aide.
Partager