In ambiente Windows, il mutex con scope di Boost utilizza le sezioni critiche di WinAPI o qualcos'altro?C'è differenza tra il mutex scope di Boost e la sezione critica di WinAPi?
risposta
La versione corrente di boost::mutex
non utilizza né Win32 CRITICAL_SECTION
né Win32 Mutex. Invece, utilizza le operazioni atomiche e un evento Win32 per bloccare le attese.
Versioni precedenti (boost 1.34.1 e precedenti) erano un involucro intorno a CRITICAL_SECTION
su Windows.
Per inciso, il mutex stesso non ha ambito. Il tipo boost::mutex::scoped_lock
e, nelle versioni recenti, boost::lock_guard<boost::mutex>
e boost::unique_lock<boost::mutex>
forniscono wrapper RAII per il blocco di un mutex per garantire che non si dimentichi di sbloccarlo.
I boost::lock_guard<>
e boost::unique_lock<>
modelli funzionano con qualsiasi tipo con lock()
e unlock()
funzioni membro, in modo da poterli utilizzare con mutex inter-processo se lo si desidera.
Grazie per la risposta. – nhaa123
Probabilmente è quasi/efficiente quanto una sezione critica di Win32? – unixman83
@ unixman83: ne dubito, una sezione critica è veloce perché è solo in-process, non è possibile utilizzarla tra i processi. Non è un oggetto kernel, ma gli eventi Win32 lo sono. Quindi suppongo che questo non sia veloce come un CS. – gbjbaanb
CRITICAL_SECTION di Win32 può essere utilizzato solo tra i thread di un singolo processo. Se è necessario utilizzare qualcosa tra i processi, è necessario un mutex. Boost non dice nulla sulle sezioni critiche, quindi suppongo che stia usando i mutex.
"ambito" significa solo che ha un wrapper che utilizza RAII per sbloccare automaticamente il mutex alla fine di un particolare ambito.
- 1. Qual è la differenza tra mutex e sezione critica?
- 2. Differenza tra "Sezione critica", "Regione critica" e "Regione di esecuzione vincolata"
- 3. semafori, sezione critica, esempi mutex in MFC e C#
- 4. Differenza tra blocchi, mutex e sezioni critiche
- 5. La sezione critica è sempre più veloce?
- 6. Sezione critica in MPI?
- 7. Qual è la differenza tra GetLongPathName e GetFullPathName in WinAPI?
- 8. Qual è la differenza tra GetClientRect e GetWindowRect in WinApi?
- 9. Numero di blocco negativo della sezione critica
- 10. VC++ 2010: errore di sezione critica strano
- 11. Boost, concetto mutex
- 12. Sostituire la sezione critica con il blocco SRW
- 13. Che cosa è la differenza tra AutoResetEvent e Mutex
- 14. Qual è la differenza tra la sezione .got e .got.plt?
- 15. boost :: mutex :: ~ mutex(): Asserzione `! Pthread_mutex_destroy (& m) 'fallita
- 16. Perché Boost scoped_lock non sblocca il mutex?
- 17. differenza tra pthread_spinlock e boost :: smart_ptr :: spinlock?
- 18. Differenza tra irange e counting_range in Boost
- 19. È valido annidare una sezione critica?
- 20. Lancio di un'eccezione C++ all'interno di una sezione omp critica
- 21. Differenza tra la sezione dati e la sezione bss in C
- 22. Come lasciare correttamente una sezione critica?
- 23. differenza tra Fili, Lavoratori, Mutex, Impilabile?
- 24. Boost Mutex con mirino Blocco
- 25. Qual è la differenza tra boost :: io_service poll_one e run_one?
- 26. boost :: lock_guard vs boost :: mutex :: scoped_lock
- 27. La differenza tra $ * e $ @
- 28. C'è una barriera implicita dopo OMP sezione critica
- 29. Esiste una differenza tra il file mappato iostream boost e il file mappato interprocesso boost?
- 30. Implementazione Boost Mutex per Windows
Non hai dato un'occhiata al codice sorgente Boost, vero? :) – OregonGhost
Sono in una posizione in cui non posso accedervi :( – nhaa123
È necessario l'accesso a Internet per entrambe le fonti Stack Overflow e Boost. Http://svn.boost.org/svn/boost/trunk/ – ognian