Tu n'as pas compris nattch et RMID !
Un process peut détacher un segment, et ce segment sera automatiquement libéré quand tous les process l'auront détaché.
Lis la spec POSIX. Un process qui se termine détache automatiquement.
Mais j'ai parfaitement compris ca, c'est pas ca le probleme !
Processus X cree un segment de memoire partagee A
Processus Y ouvre le segment A
Processus X alloue de la memoire dans A pour ses buffers et autres qu'il va partager avec Y.
Processus X, avant de detacher le segment, doit etre 100% sur que tous les buffers qu'il a alloue dans A ont ete liberes et ne seront plus utilises. Sinon il risque d'acceder a un pointeur dans un segment devenu invalide.
Bref, le processus est oblige de faire du resource tracking pour savoir quand il peut detacher le segment.
Tu peux aussi voir ca comme ca :
Tu alloues un buffer de 10Mo, et tu l'utilises pour faire des petites allocations toi-meme. Tu ne peux pas liberer le buffer de 10Mo avant d'etre sur que toutes tes petites allocations ont ete liberees, sinon ton soft risque de dereferencer un pointeur devenu illegal.
[^] # Re: vs POSIX shared memory,pointeurs,RMID,spin
Posté par pasBill pasGates . En réponse à la dépêche PTT : un outil de trace pour la NPTL. Évalué à 1.
Un process peut détacher un segment, et ce segment sera automatiquement libéré quand tous les process l'auront détaché.
Lis la spec POSIX. Un process qui se termine détache automatiquement.
Mais j'ai parfaitement compris ca, c'est pas ca le probleme !
Processus X cree un segment de memoire partagee A
Processus Y ouvre le segment A
Processus X alloue de la memoire dans A pour ses buffers et autres qu'il va partager avec Y.
Processus X, avant de detacher le segment, doit etre 100% sur que tous les buffers qu'il a alloue dans A ont ete liberes et ne seront plus utilises. Sinon il risque d'acceder a un pointeur dans un segment devenu invalide.
Bref, le processus est oblige de faire du resource tracking pour savoir quand il peut detacher le segment.
Tu peux aussi voir ca comme ca :
Tu alloues un buffer de 10Mo, et tu l'utilises pour faire des petites allocations toi-meme. Tu ne peux pas liberer le buffer de 10Mo avant d'etre sur que toutes tes petites allocations ont ete liberees, sinon ton soft risque de dereferencer un pointeur devenu illegal.