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
- RelationshipSet.cs
- SignatureResourceHelper.cs
- StopRoutingHandler.cs
- SqlTrackingService.cs
- DockAndAnchorLayout.cs
- WebPartConnectionsCloseVerb.cs
- MappingException.cs
- AlphabetConverter.cs
- ReadOnlyAttribute.cs
- WebZone.cs
- CombinedGeometry.cs
- PassportPrincipal.cs
- WebPartDescriptionCollection.cs
- InsufficientExecutionStackException.cs
- ScriptHandlerFactory.cs
- ColorAnimationUsingKeyFrames.cs
- RowUpdatedEventArgs.cs
- Substitution.cs
- CreateBookmarkScope.cs
- CustomTokenProvider.cs
- ApplicationHost.cs
- ProxyHwnd.cs
- DataRowChangeEvent.cs
- TrackBar.cs
- FileSecurity.cs
- HwndHost.cs
- AmbientValueAttribute.cs
- initElementDictionary.cs
- SafeFindHandle.cs
- HttpDictionary.cs
- EntityDataSourceViewSchema.cs
- ToolConsole.cs
- Vector3DCollectionConverter.cs
- IsolatedStorage.cs
- XmlWrappingReader.cs
- SqlCaseSimplifier.cs
- SmiEventSink_Default.cs
- Hyperlink.cs
- DataGridViewComboBoxCell.cs
- AnonymousIdentificationModule.cs
- ToolStripRendererSwitcher.cs
- DictionaryCustomTypeDescriptor.cs
- IPGlobalProperties.cs
- NeedSkipTokenVisitor.cs
- ArcSegment.cs
- XmlDomTextWriter.cs
- GeneralTransform3DGroup.cs
- WorkflowOperationAsyncResult.cs
- RemotingClientProxy.cs
- XmlSchemaNotation.cs
- InvokeMethodActivityDesigner.cs
- EncoderFallback.cs
- PermissionSet.cs
- ProfileInfo.cs
- DiagnosticEventProvider.cs
- ObjectResult.cs
- FlagsAttribute.cs
- ContentValidator.cs
- ValidationRuleCollection.cs
- SqlTopReducer.cs
- LogicalCallContext.cs
- XmlTextReaderImplHelpers.cs
- AsymmetricKeyExchangeDeformatter.cs
- EventManager.cs
- LocalTransaction.cs
- ColumnWidthChangingEvent.cs
- StringArrayEditor.cs
- TextServicesCompartmentContext.cs
- Tuple.cs
- SendKeys.cs
- WinFormsUtils.cs
- SelectionEditor.cs
- DelegateSerializationHolder.cs
- FileVersionInfo.cs
- WhereaboutsReader.cs
- KnownTypesHelper.cs
- HtmlInputButton.cs
- XPathBuilder.cs
- TableSectionStyle.cs
- SqlDataSource.cs
- RemoteWebConfigurationHostServer.cs
- SynchronizedDispatch.cs
- SoapProtocolReflector.cs
- ProfileGroupSettingsCollection.cs
- URLIdentityPermission.cs
- SafeCryptoHandles.cs
- IdentityManager.cs
- NGCSerializationManagerAsync.cs
- KeyGestureConverter.cs
- RoutedUICommand.cs
- StrokeNodeEnumerator.cs
- RawUIStateInputReport.cs
- ResolveNameEventArgs.cs
- RtfFormatStack.cs
- DictionaryEntry.cs
- Interlocked.cs
- SrgsElementFactory.cs
- TraceSwitch.cs
- DragDropManager.cs
- StreamGeometry.cs