Code:
/ DotNET / DotNET / 8.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
- RtfFormatStack.cs
- UxThemeWrapper.cs
- AuthenticateEventArgs.cs
- CannotUnloadAppDomainException.cs
- HotSpot.cs
- ProtocolElement.cs
- TransformCollection.cs
- ObjectConverter.cs
- CodeSnippetCompileUnit.cs
- RightNameExpirationInfoPair.cs
- XmlAnyAttributeAttribute.cs
- WebPartUtil.cs
- TextRangeProviderWrapper.cs
- UserControl.cs
- Errors.cs
- DesignerEditorPartChrome.cs
- XmlEnumAttribute.cs
- SqlException.cs
- FixedSOMTableRow.cs
- ComponentResourceKey.cs
- LinkedResource.cs
- JoinQueryOperator.cs
- JoinSymbol.cs
- listitem.cs
- EvidenceTypeDescriptor.cs
- HttpWriter.cs
- ResolvedKeyFrameEntry.cs
- DataServiceRequest.cs
- ResourcePermissionBaseEntry.cs
- RuntimeConfigLKG.cs
- SoapMessage.cs
- UTF7Encoding.cs
- EventQueueState.cs
- XmlSchemaImport.cs
- PermissionSetTriple.cs
- EnumMember.cs
- Hex.cs
- VarInfo.cs
- XmlnsCache.cs
- URI.cs
- NotificationContext.cs
- FunctionDefinition.cs
- IApplicationTrustManager.cs
- RenderingEventArgs.cs
- ExceptionRoutedEventArgs.cs
- Context.cs
- PointIndependentAnimationStorage.cs
- DataGridViewAutoSizeModeEventArgs.cs
- SqlClientFactory.cs
- ListView.cs
- Version.cs
- AutoCompleteStringCollection.cs
- Parser.cs
- Matrix.cs
- TagPrefixCollection.cs
- CommonRemoteMemoryBlock.cs
- ObjectCloneHelper.cs
- RegexFCD.cs
- DmlSqlGenerator.cs
- TabRenderer.cs
- OrderByBuilder.cs
- VectorAnimationUsingKeyFrames.cs
- X509SecurityTokenProvider.cs
- XmlSerializerNamespaces.cs
- FacetChecker.cs
- CancellationScope.cs
- StandardMenuStripVerb.cs
- Delegate.cs
- CompiledQueryCacheEntry.cs
- MouseGesture.cs
- DictionaryItemsCollection.cs
- InvalidateEvent.cs
- ProjectionPruner.cs
- InstalledFontCollection.cs
- FileStream.cs
- ActiveDocumentEvent.cs
- DynamicFilter.cs
- ReflectionUtil.cs
- MSAAEventDispatcher.cs
- TemplateBamlRecordReader.cs
- PagerSettings.cs
- Point3DAnimationBase.cs
- HttpPostClientProtocol.cs
- XmlSerializer.cs
- DefaultIfEmptyQueryOperator.cs
- EntityDataSourceValidationException.cs
- SqlDataReader.cs
- GlobalEventManager.cs
- MembershipUser.cs
- XmlText.cs
- RepeaterDesigner.cs
- XmlSchemaAnyAttribute.cs
- TextRangeAdaptor.cs
- TextServicesHost.cs
- CompleteWizardStep.cs
- LinqDataSourceContextEventArgs.cs
- DesignerWidgets.cs
- GrammarBuilder.cs
- TraceSwitch.cs
- Visitors.cs