windows - Initialiser kritisk sektion kun én gang for en proces

Indlæg af Hanne Mølgaard Plasc

Problem



I en multi-threaded applikation er der en måde at sikre, at en kritisk sektion initialiseres kun én gang undtagen for at sætte koden i DLL-hoved () ??

Bedste reference


Jeg foreslår at indpakke CRITICAL\_SECTION med en klasse, der håndterer initialiseringen og uninitialiseringen af ​​det kritiske afsnitobjekt i sin konstruktør og destruktor. På den måde bliver du i de fleste tilfælde sikker på tråd (du skal sørge for at ingen har adgang objektet før dets konstruktør fuldender, men det er relativt let).


Der er flere almindelige indpakninger til CRITICAL\_SECTION, du kan bruge. MFCs CCriticalSection er det oplagte valg, men du kan også lave din egen. [4]

Andre referencer 1


I Windows Vista kan du bruge one-time initialiseringsfunktionerne. Brug af One-Time Initialization viser, hvordan du bruger dem til at sikre, at en begivenhed kun initialiseres én gang. [5]

Andre referencer 2


Sikker på, at der er mange mange måder.



  1. Brug en global variabel

  2. Brug en singleton-instans

  3. Opret det i hovedfunktionen eller en anden enkeltinstansfunktion

  4. Opret det som medlem var af en enkelt forekomstklasseeksempel



og så videre. Dette er ikke anderledes end noget andet spørgsmål om at forsøge at skabe en enkelt forekomst af nogle ting i din kode.

Andre referencer 3


Du kan også bruge en wrapper klasse og erklære et globalt objekt af den klasse. Konstruktøren af ​​det globale objekt vil kun blive påberåbt en gang ved opstart.

Andre referencer 4


Du kan initialisere en global kritisk sektion i DllMain til DLL\_PROCESS\_ATTACH (og rydde op for DLL\_PROCESS\_DETACH).