Pregunta

He creado una cola sincronizada y estoy usando SyncLock en la propiedad SyncRoot de esa cola cuando invoco los métodos de puesta en cola / retirada de cola. Los métodos se invocan desde instancias de clases productor / consumidor estándar.

¿Es un uso adecuado de la propiedad SyncRoot?

¿Sería mejor práctica para crear un objeto privada compartida en cada clase y bloqueo en que en lugar?

Por favor explique su razonamiento.

¿Fue útil?

Solución

Sí, eso es exactamente lo que la propiedad es para SyncRoot. En particular, esto significa que si se crea una nueva colección "envoltura", es probable que utilice el mismo SyncRoot, por lo que todo el mundo todavía puede sincronizar correctamente.

podría crear su propio objeto de bloqueo, y que haría absolutamente seguro de que nadie más bloqueado al mismo tiempo - pero también significaría que otro código No se pudo trabajar de forma segura con la misma colección. Realmente depende del escenario - es otro código capaz de utilizar la misma colección? Es ese otro código bajo su control?

Tenga en cuenta que usted debe obtener un bloqueo para todos operaciones, no sólo en cola / quitar de la cola. En particular, si se quiere iterar sobre la colección que debe mantener el bloqueo de todo ese tiempo, como un cambio en el medio invalidará el iterador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top