Mémo lorsqu'il est exclusif en multi-processus lorsque le fichier d'exécution est différent en langage C
Si vous ne vous souciez pas trop, la clé utilisée dans shmget était IPC_PRIVATE, mais en multi-processus, la mémoire partagée est créée pour chacun. Dans cet état, fork après la création du mutex fonctionne bien, mais si le fichier exécutable est différent, il ne peut pas être correctement exclu.
Par conséquent, en spécifiant la clé avec shmget, la même mémoire partagée peut être utilisée pour un autre fichier exécutable.
ftok crée une clé avec un chemin de fichier existant et un proj_id supérieur ou égal à 0.
Utilisez la clé créée pour shmget.
Si IPC_CREAT | IPC_EXCL est spécifié, la mémoire partagée pour la clé sera créée si elle n'existe pas et une erreur se produira si elle existe déjà. Cela permet de déterminer s'il faut ou non effectuer le traitement ultérieur lié à l'initialisation.
Créez un objet mutex comme d'habitude.
Verrouillez / déverrouillez si nécessaire, comme d'habitude.
--Si les fichiers exécutables sont différents, vous devez spécifier la clé de la mémoire partagée. --Si vous n'avez qu'un seul fichier exécutable, vous pouvez simplement utiliser pthread_mutexattr_setpshared. --IPC_PRIVATE peut être utilisé.
--Confirmation de la probabilité de collision ftok
Recommended Posts