Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Threading / Interlocked.cs / 1 / Interlocked.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System.Threading { using System; using System.Security.Permissions; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; // After much discussion, we decided the Interlocked class doesn't need // any HPA's for synchronization or external threading. They hurt C#'s // codegen for the yield keyword, and arguably they didn't protect much. // Instead, they penalized people (and compilers) for writing threadsafe // code. public static class Interlocked { /****************************** * Increment * Implemented: int * long *****************************/ [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern int Increment(ref int location); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern long Increment(ref long location); /****************************** * Decrement * Implemented: int * long *****************************/ [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern int Decrement(ref int location); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern long Decrement(ref long location); /****************************** * Exchange * Implemented: int * long * float * double * Object * IntPtr *****************************/ [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern int Exchange(ref int location1, int value); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern long Exchange(ref long location1, long value); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern float Exchange(ref float location1, float value); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern double Exchange(ref double location1, double value); [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern Object Exchange(ref Object location1, Object value); [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern IntPtr Exchange(ref IntPtr location1, IntPtr value); [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [System.Runtime.InteropServices.ComVisible(false)] public static T Exchange(ref T location1, T value) where T : class { _Exchange(__makeref(location1), __makeref(value)); //Since value is a local we use trash its data on return // The Exchange replaces the data with new data // so after the return "value" contains the original location1 //See ExchangeGeneric for more details return value; } [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] private static extern void _Exchange(TypedReference location1, TypedReference value); /****************************** * CompareExchange * Implemented: int * long * float * double * Object * IntPtr *****************************/ [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern int CompareExchange(ref int location1, int value, int comparand); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern long CompareExchange(ref long location1, long value, long comparand); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern float CompareExchange(ref float location1, float value, float comparand); [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern double CompareExchange(ref double location1, double value, double comparand); [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern Object CompareExchange(ref Object location1, Object value, Object comparand); [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static extern IntPtr CompareExchange(ref IntPtr location1, IntPtr value, IntPtr comparand); [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [System.Runtime.InteropServices.ComVisible(false)] public static T CompareExchange (ref T location1, T value, T comparand) where T : class { _CompareExchange(__makeref(location1), __makeref(value), comparand); //Since value is a local we use trash its data on return // The Exchange replaces the data with new data // so after the return "value" contains the original location1 //See CompareExchangeGeneric for more details return value; } [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] private static extern void _CompareExchange(TypedReference location1, TypedReference value, Object comparand); /****************************** * Add * Implemented: int * long *****************************/ [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal static extern int ExchangeAdd(ref int location1, int value); [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern long ExchangeAdd(ref long location1, long value); [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static int Add(ref int location1, int value) { return ExchangeAdd(ref location1, value) + value; } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public static long Add(ref long location1, long value) { return ExchangeAdd(ref location1, value) + value; } /****************************** * Read *****************************/ public static long Read(ref long location) { return Interlocked.CompareExchange(ref location,0,0); } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OleDbPropertySetGuid.cs
- OdbcConnectionPoolProviderInfo.cs
- ConnectionProviderAttribute.cs
- HttpServerProtocol.cs
- RequestBringIntoViewEventArgs.cs
- ConfigsHelper.cs
- Drawing.cs
- WindowsListViewGroup.cs
- ReverseInheritProperty.cs
- UriScheme.cs
- SQLInt16.cs
- SystemWebExtensionsSectionGroup.cs
- DataGridViewColumnEventArgs.cs
- XmlSchemaComplexType.cs
- GuidelineSet.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- TextUtf8RawTextWriter.cs
- FileDataSourceCache.cs
- DataSourceCache.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- ApplicationServiceHelper.cs
- LOSFormatter.cs
- SimpleType.cs
- TextTreeObjectNode.cs
- WasEndpointConfigContainer.cs
- QueryLifecycle.cs
- BitmapEffectGroup.cs
- NetworkStream.cs
- Monitor.cs
- XmlNodeComparer.cs
- IPPacketInformation.cs
- BitmapEffect.cs
- EventMappingSettings.cs
- PerfProviderCollection.cs
- TextParentUndoUnit.cs
- MdiWindowListStrip.cs
- MenuAutomationPeer.cs
- RegionInfo.cs
- CodeCompileUnit.cs
- EmptyStringExpandableObjectConverter.cs
- LinqMaximalSubtreeNominator.cs
- StyleTypedPropertyAttribute.cs
- DatagridviewDisplayedBandsData.cs
- SqlConnectionStringBuilder.cs
- CurrencyManager.cs
- Utilities.cs
- wmiprovider.cs
- ClientTargetCollection.cs
- LocalizationComments.cs
- BindingsCollection.cs
- ListItemCollection.cs
- LogArchiveSnapshot.cs
- BitStack.cs
- MenuStrip.cs
- TimelineGroup.cs
- SwitchElementsCollection.cs
- AssociationProvider.cs
- HttpHandlerAction.cs
- DbConnectionFactory.cs
- NativeMethods.cs
- ImageMap.cs
- Mappings.cs
- HtmlInputPassword.cs
- XmlNodeReader.cs
- InlineCategoriesDocument.cs
- ApplicationSettingsBase.cs
- ReflectionUtil.cs
- ContactManager.cs
- HScrollBar.cs
- EntityConnectionStringBuilder.cs
- AssemblyCache.cs
- Accessible.cs
- SystemResources.cs
- SQLSingle.cs
- WinEventHandler.cs
- LicenseProviderAttribute.cs
- IssuedSecurityTokenParameters.cs
- SpeakProgressEventArgs.cs
- FixedFlowMap.cs
- BufferedStream.cs
- ObjectHelper.cs
- BindingExpressionBase.cs
- StateMachineExecutionState.cs
- ClientUrlResolverWrapper.cs
- Timer.cs
- TimeSpanStorage.cs
- ClientSession.cs
- RequestDescription.cs
- RequestCachingSection.cs
- WebServicesDescriptionAttribute.cs
- NullEntityWrapper.cs
- WebPartAuthorizationEventArgs.cs
- ISessionStateStore.cs
- ObjectAnimationBase.cs
- PackWebRequestFactory.cs
- ObjectSecurity.cs
- ApplicationSecurityManager.cs
- AsyncCompletedEventArgs.cs
- oledbmetadatacolumnnames.cs
- FacetValues.cs