c ++ - faldfald på brug af MFC-synkroniseringsobjekter

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brugt MFC-synkroniseringsobjekter i mine projekter uden problemer. Men for nylig kom jeg på tværs af en artikel, der forklarer, at MFC-synkronisering er helt forkert. Jeg er ikke sikker på hvilken version af MFC han snakker om, men jeg mener alvorligt, at MFC har modnet i de seneste versioner. Jeg bruger MFC-bibliotek, der følger med Visual Studio 2008 Installation. Er det sikkert at bruge MFC-biblioteker i denne version, især til synkronisering? [6]

Bedste reference


På mutex timeouts er der en designskole til samtidig software, der siger, at du ikke bør bruge timeout for normal drift. Dit design vil så involvere mutexes eller andre låse, der ikke tider ud, og timeout er effektivt en mekanisme til at håndtere deadlocks: Du forsøger at designe dit system for ikke at udvise deadlocks, men hvis de sker, vil du hellere have det fejle mere eller mindre yndefuldt, end forblive forkælet for evigt.


Hvis du bruger dine låse på denne måde, kan det meget vel ikke være meget, hvorfor du forsøger at erhverve en mutex fejlet.


På den anden side virker det måske ikke fundamentalt brudt, men i det mindste noget mangelfuldt, at disse oplysninger går tabt uden god grund, og der er bedre rammer derude, der giver OO wrappers til mutexes, så uanset dette undgår MFC i dette tilfælde som en god ide.

Andre referencer 1


Forfatterens påstande er ikke passende for enhver betingelse, men for specifikke betingelser. Lock returnerer BOOL, og du vil mest ikke bekymre dig om det mislykkedes på grund af en eller anden grund. Det meste af tiden du ville kalde for at få lås eller vent. I andre tilfælde vil FALSE betyde fejl. Og hvis du skal tjekke timeout, kan du bruge indfødt API (hvilket er sjældent).


Rekursiv CSingleLock er absurd. Du bruger ikke samme objekt til relock. Du kan sikkert bruge multipe CSinlgeLock objekter for at få rekursiv adgang.


CEvent, CMutex og andre navngivne objektklasser kan bruges accross proces. Jeg har brugt det!


Jeg bruger ikke semaforer. Kan være nogle andre kan kommentere.