¿Hay un conjunto de atributos cuasi estándar para anotar la seguridad de los hilos, la inmutabilidad, etc.?

8

Excepto por una publicación de blog aquí y allá, que describe los atributos personalizados que alguien creó, pero que no parecen tener ninguna tracción, como uno que describe cómo forzar la inmutabilidad , otro en Documenting Thread Safety , modelando los atributos después de anotaciones JCIP : ¿hay algún estándar emergente? ? ¿Algo que MS pueda estar planeando para el futuro?

Esto es algo que debería ser estándar, si hay alguna posibilidad de interoperabilidad entre bibliotecas en cuanto a la concurrencia. Tanto para fines de documentación, como para alimentar herramientas de prueba estáticas / dinámicas.

Si MS no está haciendo nada en esa dirección, podría hacerse en CodePlex, pero tampoco pude encontrar nada allí.

< opinion > La concurrencia y la seguridad de subprocesos son realmente difíciles en lenguajes imperativos y de objeto como C # y Java, debemos intentar controlarlo, hasta que, con suerte, cambiemos a lenguajes más apropiados.     

pregunta Eugene Beresovsky 15.07.2011 - 06:56

2 respuestas

3

El problema tanto de la inmutabilidad como de la seguridad de los hilos es que no son conceptos en blanco y negro, pero existen varias garantías posibles al respecto. Reducir eso a atributos simples puede ser difícil. En mi opinión, un simple atributo ThreadSafe y Immutable no es suficiente. Todavía estoy elaborando un conjunto de atributos que capturan al menos la semántica más importante que me suena prometedor.

Por ejemplo, toma un método AddRange . Puede ser un hilo lo suficientemente seguro como para no corromper nunca el estado de la colección subyacente, pero puede que no sea atómico. Una implementación común con estas propiedades podría ser simplemente llamar a un método atómico Add para cada elemento.

En el lado de la inmutabilidad también tenemos diferentes aspectos:

  • Ofreciendo solo accesores de solo lectura o que realmente nunca cambien
  • La profundidad de la inmutabilidad, es decir, los subobjetos también son inmutables
  • Inmutabilidad física vs. lógica. Por ejemplo, la inicialización perezosa no cambia el estado visible, pero cambia el estado interno.

Una anotación es que este contexto ya existe: Pure para métodos sin efectos secundarios.

    
respondido por el CodesInChaos 17.08.2011 - 20:08
0

No creo que haya un conjunto de estándares (incluso casi) en este momento. Los proyectos aislados hacen algo de esto a su manera. I una publicación de hilo hablan de inmutabilidad a través del código Contratos e incluso hornear directamente en el sistema de tipo. He visto aún menos sobre la seguridad de los hilos.

    
respondido por el Kit 17.08.2011 - 19:34

Lea otras preguntas en las etiquetas