Ti suggerisco di non utilizzare le sezioni critiche di WinAPI. È possibile ottenere lo stesso utilizzando std::mutex. Quando lo si utilizza, è anche possibile utilizzare il wrapper RAII idiom per il mutex di sblocco automatico (std::lock_guard).
AGGIORNAMENTO: una differenza tra la sezione critica e il mutex è che è possibile bloccare la sezione critica più volte su un thread, ma ciò non è vero per il semplice std :: mutex. Se avete bisogno di un comportamento ricorsivo di bloccare l'uso std::recursive_mutexstd::lock_guard<std::recursive_mutex>
UPDATE 2: dettagliata differenza tra le sezioni critiche e mutex sono descritti here, confronto delle prestazioni è here.
Motivi: è preferibile utilizzare un meccanismo definito standard ogni volta che è possibile. Se usi una cosa specifica per la piattaforma, avvolgila. Quindi, se hai paura delle prestazioni, crea una classe di sezione critica con i metodi di blocco/sblocco (per soddisfare i requisiti di concetto BasicLocakable) e usa std::lock_guard<MyCriticalSection>
.
fonte
2015-05-01 10:40:08
se potevo fare un suggerimento minore, e forse è ancora saggio omettere semplicemente per il gusto di un esempio più semplice su cui costruire, potrebbe essere in buona salute per fare GuardCS noncopyable. –
@ come ho aggiornato – marcinj