相关疑难解决方法(0)

究竟什么是IntPtr?

通过使用IntelliSense并查看其他人的代码,我遇到过这种IntPtr类型; 每次需要使用时,我只需要放置nullIntPtr.Zero发现大多数功能都可以使用.究竟是什么以及何时/为何使用它?

c# intptr

163
推荐指数
7
解决办法
11万
查看次数

为什么不在System.Double和System.Long上使用volatile?

有人问过像我这样的问题,但我的情况有点不同.现在的问题是,"为什么volatile关键字不允许C#在类型System.DoubleSystem.Int64等?"

乍一看,我回答了我的同事,"好吧,在32位机器上,这些类型至少需要两个滴答才能进入处理器,.Net框架的目的是抽象出像这样的处理器特定细节. " 他回答说:"如果由于处理器特定的问题导致你无法使用某个功能,那么它就不会抽象出任何东西!"

他暗示一个特定于处理器的细节不应该出现在使用框架的人身上,这个框架"抽象"远离程序员的细节.因此,框架(或C#)应该抽象出那些并做它需要做的事情来提供相同的保证System.Double等等(无论是信号量,内存障碍还是其他).我认为框架不应该增加信号量的开销volatile,因为程序员不期望使用这样的关键字这样的开销,因为32位类型不需要信号量.64位类型的更大开销可能会让人感到意外,因此,更好的.Net框架只是不允许它,并且如果开销是可接受的,那么就可以在更大的类型上使用自己的信号量.

这导致我们调查volatile关键字的全部内容.(见页).该页面在说明中说明:

在C#中,在字段上使用volatile修饰符可确保对该字段的所有访问都使用VolatileRead或VolatileWrite.

嗯..... VolatileRead并且VolatileWrite都支持我们的64位类型!! 那么我的问题是,

"为什么volatile关键字不允许C#在类型System.DoubleSystem.Int64等?"

.net c# multithreading volatile

40
推荐指数
3
解决办法
7986
查看次数

标签 统计

c# ×2

.net ×1

intptr ×1

multithreading ×1

volatile ×1