Tengo un push-backing de threads en la lista AWL y otro thread pop-fronting de la lista. ¿Debo bloquear la lista con mutex en tal caso?¿Debo bloquear la lista STL con mutex en el escenario push_back pop_front?
Respuesta
De SGI's STL on Thread Safety:
Si varios subprocesos tienen acceso a un único contenedor, y al menos un hilo podría potencialmente escribir, entonces el usuario es responsable de asegurar la exclusión mutua entre las roscas durante accede al recipiente.
Dado que ambos hilos modifican la lista, supongo que debe bloquearla.
Probablemente. Estas operaciones no son lo suficientemente simples como para ser atómicas, por lo que solo serán seguras para subprocesos si la implementación realiza explícitamente el bloqueo necesario.
Sin embargo, el estándar C++ no especifica si estas operaciones deberían ser seguras para subprocesos, por lo que depende de la implementación individual decidir eso. Verifica los documentos. (O háganos saber qué implementación está usando)
No hay garantía de que una implementación de STL sea segura para subprocesos, y dado que cuesta rendimiento, creo que la mayoría no lo es. Definitivamente deberías usar un mutex.
Dado que las operaciones stl pop/push son AFAIK no atómicas, tiene que usar un mutex.
mayoría de las implementaciones STL son seguros para subprocesos en los sens que puede acceder varios casos de un tipo de lista de varios hilos sin bloquear. Pero DEBE bloquear cuando esté accediendo a la misma instancia de su lista.
echar un vistazo a esto para más información: STL thread safty in sgi stl
- 1. ¿Debo bloquear mutex una sola variable?
- 2. std :: list threading push_back, front, pop_front
- 3. ¿Debo eliminar un Mutex?
- 4. C++ STL vector: push_back tomando como referencia
- 5. Bloquear mutex en un hilo y desbloquearlo en el otro
- 6. ¿Qué contenedor STL debo usar para un FIFO?
- 7. Mover con el vector :: push_back
- 8. ¿debo bloquear 'evento'?
- 9. ¿Cuándo debo volver a bloquear la cámara?
- 10. ¿Debo bloquear el objeto cuando leo de él?
- 11. ¿Obtener una lista de mutex?
- 12. ¿Cómo almaceno arreglos en una lista STL?
- 13. ¿Debo aleatoriamente mezclar antes de insertar en el conjunto STL?
- 14. Hilo bloqueado con Mutex bloqueado
- 15. manera rápida de implementar pop_front a std :: vector
- 16. push_back usando la biblioteca Thrust
- 17. Cómo exponer la lista STL sobre el límite de DLL?
- 18. ¿Debo verificar dos veces antes y después de bloquear una lista?
- 19. evitar especificar la columna clave en el doble escenario relacionado
- 20. cómo bloquear en la llamada ajax (quiero bloquear)
- 21. ¿Mutex o no a Mutex?
- 22. Ordenar la lista utilizando la función STL tipo
- 23. push_back frente a emplace_back
- 24. Boost, concepto mutex
- 25. Iteradores entendimiento en la STL
- 26. push_back() y push_front() en Java
- 27. C++ vector push_back
- 28. Bloqueos mutex jerárquicos en Java
- 29. objeto mutex llamado
- 30. C contenedor STL ++ y la construcción en el lugar
de SGI no es la misma que la biblioteca estándar STL-por igual implementado en C++. Este último no dice nada sobre concurrencia o enhebrado. (También hay varias otras diferencias, aunque no son relevantes aquí). Pero, en resumen, no puede suponer que lo que dice SGI se aplicará a la stdlib – jalf