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 :

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
Et voici ce que dit gdb :

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 ()
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.

Merci de votre aide.