2011-04-13 15 views
14

Tengo una aplicación que estoy tratando de hacer multiproceso. Cada subproceso tendrá acceso a una gran cantidad de datos de solo lectura.¿Es aconsejable acceder a datos de solo lectura de múltiples hilos simultáneamente?

¿Está bien si varios hilos acceden a los datos simultáneamente? Sé que si los datos no fueran de solo lectura, tendría que usar mutexes u otra forma de sincronización para evitar condiciones de carrera. Pero me pregunto si está bien leer los datos sin tener en cuenta la sincronización.

Los datos en cuestión no se modificarán durante la duración de todos los hilos. La aplicación se ejecutará en Linux y Windows y está escrita en C++ si eso marca alguna diferencia.

+0

Si bien la respuesta general ya está dada, me gustaría agregar una advertencia. Tenga cuidado si el recurso es una base de datos. Vea aquí: http://stackoverflow.com/questions/13912489/read-only-access-only-for-sqlite3-from-multiple-threads – Fabian

+0

Tal vez el problema crítico es si el rendimiento se verá afectado, incluso si la lectura solo es un hilo seguro. Supongamos que 100 hilos están leyendo de un vector de 10000 elementos de múltiples índices aleatorios. –

Respuesta

18

Si los datos son de solo lectura durante el tiempo de vida de todos los hilos que lo leen, entonces sí, está perfectamente bien leer sin sincronización.

+1

Creo que me ganaste por 6 segundos – ThomasMcLeod

+0

@Thomas: estaba a punto de publicar eso en tu respuesta: P –

+1

No te preocupes ThomasMcLeod, te daré un voto positivo también ... – rhinoinrepose

11

Si los datos son realmente de solo lectura durante el acceso de subprocesos múltiples, entonces no es necesaria la sincronización.

3

Sí, está bien.

No debería tener ningún problema.

3

Si los datos se arreglan antes de que se inicie alguno de los hilos de lectura, entonces sí, está bien.

Cuestiones relacionadas