Interprocess synkroniseringsbarriere i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at etablere en barriere mellem forskellige processer i Windows. De er i det væsentlige to kopier af samme proces (kører dem som to separate tråde i stedet for processer er ikke en mulighed).
Tanken er at placere barrierer på forskellige stadier af programmet for at sikre, at begge processer starter hvert trin på samme tid.
Hvad er den mest effektive måde at implementere dette på i Windows?

Bedste reference


Brug en navngivet begivenhed (se CreateEvent og WaitForSingleObject API funktioner). Du ville have brug for to begivenheder pr. Barriere - hver begivenhed, der er oprettet i et andet tilfælde af applikationen. Så venter begge tilfælde på hinandens begivenhed. Selvfølgelig kan disse begivenheder genbruges senere til en anden barriere. [1]


Der eksisterer dog en kompleksitet - da begivenhedsnavne er globalt unikke (lad os sige det for enkelhed), vil hver begivenhed have et andet navn, som måske er præfikset af instansens proces-id. Så hver forekomst af ansøgningen skulle få en anden forekomst s ID for at finde navnet på den begivenhed, der er oprettet af en anden instans.


Hvis du har en windowed ansøgning, kan du udsende en besked, som vil informere anden forekomst af ansøgningen om en eksistens af første instans.