J'essaie de trouver un moyen d'écrire une application avec IPC sans verrouillage sous Linux, en C, avec des processeurs multicœurs.
Supposons que j'ai le processus 1 et le processus 2 qui écrivent dans une mémoire FIFO ou partagée. Ensuite, le processus 3 et le processus 4 liront à partir de cette mémoire partagée ou FIFO.
Est-ce possible avec un algorithme sans verrouillage?
Vos conseils sont très appréciés.
c
linux
multithreading
poly
la source
la source
Réponses:
J'ai vu une référence à l'utilisation de tampons en anneau et un accès contrôlé aux pointeurs de localisation pour éliminer ou réduire le besoin de verrous. Cependant, cela n'élimine pas la nécessité d'attendre et ne devrait fonctionner que si un tampon en anneau a un écrivain et un lecteur. Dans votre cas, vous auriez besoin d'au moins deux tampons.
Le mécanisme que je comprends est:
l'auteur met à jour le dernier pointeur d'entrée.
le lecteur attend qu'il y ait une entrée disponible dans le tampon en anneau (dernier! = courant).
Selon le temps d'attente utilisé, cela peut soit ajouter de la latence pour les nouveaux éléments dans une file d'attente vide, soit graver de nombreux cycles CPU dans la boucle d'attente. L'ordre de mise à jour du pointeur et de séparation stricte de l'accès en écriture est essentiel pour que cela fonctionne. L'écrivain est uniquement autorisé à écrire l'entrée du tampon en anneau avant d'incrémenter le pointeur pour le mettre à la disposition du lecteur.
la source
Oui c'est possible. Nous utilisons l'un des algorithmes de la file d'attente sans verrou dans notre projet. Mais ces algorithmes ne sont vraiment pas évidents. Si vous voulez les comprendre en profondeur, vous devriez être prêt à y passer quelques mois.
la source
La communication entre processus ne peut pas être sans verrouillage. Inter-thread uniquement. Pour autant que je sache.
la source