Une question comme la mienne a été demandé, mais le mien est un peu différent. La question est: "Pourquoi le mot clé volatile n'est autorisé en C#
types System.Double
et System.Int64
, etc....?"
À première vue, j'ai répondu à mon collègue, "eh Bien, sur une machine 32 bits, ces types de prendre au moins deux des tiques à même de saisir le processeur, et la .Net framework qui a l'intention d'abstraction spécifique de processeur détails comme ça." À laquelle il répond, "Ce n'est pas l'abstraction de quelque chose si c'est vous empêchant d'utiliser une fonction à cause d'un processeur spécifique de problème!"
Il implique qu'un processeur spécifique de détail ne devrait pas présenter à une personne à l'aide d'un cadre de "résumés" détails comme ça, loin de le programmeur. Ainsi, le cadre (ou C#) devrait abstraction de ceux-ci et de faire ce qu'il doit faire pour offrir les mêmes garanties pour System.Double
, etc. (si c'est un Sémaphore, barrière de mémoire, ou quoi que ce soit). J'ai fait valoir que le cadre ne doit pas ajouter la surcharge d'un Sémaphore sur volatile
, parce que le programmeur n'est pas attendu à une telle surcharge avec un tel mot-clé, en raison d'un Sémaphore n'est pas nécessaire pour la version 32 bits de types. La plus grande charge pour la version 64 bits de types peut venir comme une surprise, donc, c'est mieux pour la .Net framework pour juste ne le permet pas, et vous faire votre propre Sémaphore sur les grands types de si la surcharge est acceptable.
À l'origine de notre enquête sur ce que le mot clé volatile est tout au sujet. (voir cette page). Que les états de la page, dans les notes:
En C#, à l'aide de la volatilité modificateur sur un champ garantit que tous les accès à ce champ utilise VolatileRead ou VolatileWrite.
Hmmm.....VolatileRead
et VolatileWrite
de soutenir notre 64-bit types!! Ma question est donc,
"Pourquoi est-ce le mot clé volatile n'est autorisé en
C#
typesSystem.Double
etSystem.Int64
, etc....?"