53 votos

¿Por qué Interlocked.Exchange no admite el tipo booleano?

¿Hay alguna razón práctica ¿por qué equipo net decidió no apoyar booleano en operación Interlocked.Exchange?

Uno de los ejemplos de uso es cuando quiere garantía de que algún código es ejecutar una sola vez y desea utilizar un indicador booleano que.

53voto

Hans Passant Puntos 475940

Sí, hay una buena razón. La aplicación de la Entrelazados métodos requiere un bajo nivel de apoyo a nivel de procesador. Ver esta respuesta , por ejemplo. Eso es un problema a la hora de definir un marco que es la arquitectura agnóstico.

La aplicación de la bajo-bloqueo de técnicas apoyadas por el Enclavamiento de la clase sobre los tipos de datos que son una fracción del procesador nativo de tamaño de palabra es difícil. El RISC enfoque de la cpu de diseño que fue popular hace más de 10 años desalentado fuertemente. La falta de coincidencia entre el operando tamaño nativo y un bus de memoria de ancho hace que sea muy difícil de implementar. Una razón por la que Intel x86 arquitectura está todavía en su regazo, sobreviviendo a los 30 años ya por no tomar los atajos de teclado. Más información de fondo sobre RISC en este artículo de wikipedia.

12voto

ILIA BROUDNO Puntos 16

No responder a la pregunta, pero como solución se puede usar int en lugar de bool la manera C hace.

    int m_IsFirstTime = 1; // 1 means true 0 means false. 

    void SomeMethod()
    {
        if (1 == Interlocked.Exchange(ref m_IsFirstTime , 0))
            // Do something for the first time.

        else
            // Do something for all other times.

    }

P.D. Si hay evidencia de que Lee es más rápido que escribir entonces Interlocked.CompareExchange sería mejor para este caso (sólo una primera vez y que asumir un montón de no primera).

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X