2011-01-29 9 views
8

Cuando no se utiliza dentro de un contexto static (es decir, cuando la palabra clave static no está presente, y usted no tiene un alcance global), lo que hace el shared y __gshared palabras clave hacer?"compartida" y "__gshared" Palabras clave en D

Ejemplos:

struct Temp 
{ 
     shared int i; 
    __gshared int j; 
} 

Respuesta

4

El int compartida se escribe shared(int), lo cual NO hacer otra cosa que darle ese tipo. El __gshared int no funciona; a DMD le gusta ignorar los atributos no opcionales.

+0

¿En otras palabras, los dos son inútiles aquí? – Mehrdad

+4

__gshared no es un no-op. Implica estática. – dsimcha

+3

También: mientras que 'shared int' solo se comporta como un calificador de tipo (por ejemplo,' const') en la implementación actual de dmd para variables locales, un 'shared' implementado correctamente, como yo lo entiendo, debe haber read-acquire y write-release-semántica (es decir, usar cercas de memoria en muchas arquitecturas y evitar ciertas optimizaciones del compilador, ver también http://www.digitalmars.com/d/2.0/faq.html#shared_memory_barriers). Esto ocasionalmente sería relevante incluso para variables locales, por ejemplo, en el caso de un cierre ejecutado dentro de otros hilos (o en el caso raro de acceso a la pila de hilos cruzados). – stephan

1

D2 se establece por defecto en Thread Local Storage, mientras que C, C++ y D1 se guardan de manera predeterminada en el almacenamiento global.

Una de las diferencias es que una variable global en D es visible para otros hilos, mientras que TLS no lo es.

Esto puede no parecer mucho, pero intente conectarse a una biblioteca C sin darse cuenta. (inmutable es. global también)

IME __gshared prácticamente solo existe para forzar algo en global cuando normalmente no lo haría.

puede haber otros usos para él, pero no he visto ninguno.

Un ejemplo sería una variable global en un encabezado C. Si intentas interactuar con él, necesitarás inmutable o __gshared. Hay otras formas, por supuesto, pero esto es probablemente lo más fácil.

Cuestiones relacionadas