2009-02-05 11 views

Respuesta

11

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.

+1

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

1

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)

1

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.

1

Dado que las operaciones stl pop/push son AFAIK no atómicas, tiene que usar un mutex.

3

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