Volatile variables and CSharp threads
The volatile keyword is a convenience keyword for those who need to access member variables of a class or structure in multi-threaded conditions.
Again, since this is an advanced CSharp concept this is probably something that most of you will not need to worry about using, especially in ASP.NET. However, there have been times when I’ve used multi-threading in an ASP.NET application (for screen scraping performance) so it is not completely out of the realm of possibility for you to need to know something about how to do multi-threaded programming. If you do, you’ll be glad you learned about the volatile keyword.
The purpose of the volatile keyword is to tell the compiler that the variable you are marking as volatile may be accessed by multiple threads. There are certain optimizations that the CSharp compiler makes when it compiles our code and unless the variable is marked as volatile, the compiler will make optimizations assuming that the variable will only be accessed by one thread at a time.
Note that the volatile keyword can only be used against the following types of data:
Variables that are objects or structures will need to use other locking mechanisms.
Only variables that are members of classes or structures can be declared as volatile.
To declare a variable volatile, just add volatile as one of the variable modifiers.
class Demo { private volatile int m_multiThreadVar; }
Other places talking about Volatile
- Charlie Calvert’s Community Blog : CSharp Language Specification … – re: CSharp Language Specification, Version 3.0 Available for Review. One week to review 500 pages, I’ll try my best… Section 10.5.3. isn’t very clear. It mentions “acquire semantics” and “release semantics for volatile fields; …
- delegates and threading, how volatile! – net and specifically c-sharp. for so long i have wondered about threading, particularly as it became clear that intel and amd were moving to multi-core systems, and pushing them on consumers whether the latter wanted them or not. …
- Double Check Locking and Other Premature Optimizations Can Shoot … – Note that we use the volatile keyword for the _singletonInstance static member. Why? Long story made short, this has to do with how different memory models can reorder reads and writes. For the current CLR you can ignore the volatile …
Other post in Advanced CSharp
- Two Interfaces. Same Method. Two meanings. - September 29th, 2008
- Readonly variables in CSharp? Really?! - October 29th, 2008
- Dispose with Using - November 10th, 2008
- Delegates in .NET - December 4th, 2008
- Using Sealed in CSharp - December 8th, 2008
- CSharp checked and unchecked - December 11th, 2008
- Advanced CSharp - unsafe mode - December 15th, 2008
- Volatile variables and CSharp threads - December 22nd, 2008
- What is the global keyword in CSharp? - December 29th, 2008
- CSharp fixed keyword - January 5th, 2009
- using - There's more there than you are using - February 2nd, 2009
- Removing Warnings from CSharp Compile Cycle - March 10th, 2009
- Just say “No!” to C# Regions? Really?! - April 16th, 2009
- C# “” better than string.Empty? - April 20th, 2009
- .Net String Pool – Not Just For The Compiler - April 22nd, 2009
- CSharp ?? Operator - May 18th, 2009
- Using VB.NET From CSharp - July 1st, 2009
- Dispose, Finalize and SuppressFinalize - July 9th, 2009
- What is .NET’s Object.GetHashCode() Used For? - August 5th, 2009
- ASP.NET Substitution Control - October 22nd, 2009
- Transaction Tracking Typed Datasets Using SqlTransaction - July 20th, 2010
- CSharp's Property Shortcuts - July 17th, 2012
- && vs & and | vs ||... What's the difference? - August 21st, 2012
- Advanced CSharp - yield - November 27th, 2012
- Making values nullable - December 18th, 2012
- Stackalloc in CSharp - January 22nd, 2013
Related Post
One Pingback/Trackback
- 23 December 2008 at 5:12pm
- Dew Drop - December 23, 2008 | Alvin Ashcraft's Morning Dew
[...] Volatile Variables and C# Threads (Dave M. Bush) ...




Pingback: Dew Drop - December 23, 2008 | Alvin Ashcraft's Morning Dew