[Mono-list] Applying volatile keyword on IntPtr

ptr2009 ptrajkumar at gmail.com
Wed Jun 17 11:40:19 EDT 2009


hey all
 
   I am applying a volatile keyword on IntPtr like this
 
private volatile IntPtr mNativeCancelRequest;
 
  And compiling against Mono 2.4 I get this error. 
 
error CS0677: `mNativeCancelRequest': A volatile field cannot be of the type
`System.IntPtr'
 
This seems like a bug according to the standard. As it explicitly allow this
to be done.
 
 Is this a bug in the gmcs compiler ? Should I file a bug report ? 

Thanks
Raj


10.5.3 Volatile fields


When a field-declaration includes a volatile modifier, the fields introduced
by that declaration are volatile fields. 

For non-volatile fields, optimization techniques that reorder instructions
can lead to unexpected and unpredictable results in multi-threaded programs
that access fields without synchronization such as that provided by the
lock-statement (§8.12). These optimizations can be performed by the
compiler, by the runtime system, or by hardware. For volatile fields, such
reordering optimizations are restricted: 
A read of a volatile field is called a volatile read. A volatile read has
“acquire semantics”; that is, it is guaranteed to occur prior to any
references to memory that occur after it in the instruction sequence. 
A write of a volatile field is called a volatile write. A volatile write has
“release semantics”; that is, it is guaranteed to happen after any memory
references prior to the write instruction in the instruction sequence.

These restrictions ensure that all threads will observe volatile writes
performed by any other thread in the order in which they were performed. A
conforming implementation is not required to provide a single total ordering
of volatile writes as seen from all threads of execution. The type of a
volatile field must be one of the following:

A reference-type.

The type byte, sbyte, short, ushort, int, uint, char, float, bool,
System.IntPtr, or System.UIntPtr.
An enum-type having an enum base type of byte, sbyte, short, ushort, int, or
uint.



-- 
View this message in context: http://www.nabble.com/Applying-volatile-keyword-on-IntPtr-tp24076358p24076358.html
Sent from the Mono - General mailing list archive at Nabble.com.



More information about the Mono-list mailing list