Trovo che l'implementazione std::mutex
in Visual Studio 2013 sia troppo lenta. Usa un mutex pesante per assicurare che la sincronizzazione possa essere raggiunta anche tra i processi che sono eccellenti e dandy; A meno che tu non stia parlando con altri processi e potresti davvero usare quella velocità extra che è CRITICAL_SECTION
con le sue offerte spin-lock su Win32.È possibile implementare il concetto mutex di C++ 11 per l'uso da std :: condition_variable?
Ho provato a implementare un fast_recursive_mutex
che aderisce al concetto mutex C++ 11 e che soddisfa tutti gli obblighi in base alle specifiche. In tutti i sensi, è una sostituzione drop-in per std::mutex
finché non si esegue la sincronizzazione tra i processi.
Funziona alla grande con std::lock_guard
e std::unique_lock
. Tuttavia, si verificano problemi durante il tentativo di utilizzo con std::condition_variable
perché std::condition_variable::wait(std::unique_lock<std::mutex>&)
non ammette il mio fast_recursive_mutex
a causa dell'uso codificato di std::mutex
.
Quindi le mie domande sono:
- Perché
wait()
non ammette un altro tipo di mutexstd::mutex
? - C'è qualcosa che posso fare al riguardo? (A corto di re-implementation condition_variable).
La prima domanda di "perché non ammette un altro tipo", si potrebbe anche chiedere perché hanno scritto due diverse classi 'condition_variable' e non hanno semplicemente un tipo con un tipo mutex con modello. – CashCow