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
- HttpProfileBase.cs
- HtmlTableCellCollection.cs
- ChannelProtectionRequirements.cs
- DynamicDataRouteHandler.cs
- VectorAnimation.cs
- TextWriterTraceListener.cs
- SQLRoleProvider.cs
- BuildResultCache.cs
- QilChoice.cs
- Opcode.cs
- ServicePoint.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- WebConfigurationManager.cs
- WsatAdminException.cs
- BehaviorEditorPart.cs
- PropertyGrid.cs
- CodeDomConfigurationHandler.cs
- FullTextLine.cs
- XmlIlTypeHelper.cs
- InvalidProgramException.cs
- NativeMethods.cs
- SafeFileMapViewHandle.cs
- UpdatePanel.cs
- ClientTargetCollection.cs
- MetadataPropertyvalue.cs
- ChunkedMemoryStream.cs
- OleDbException.cs
- DoubleStorage.cs
- ColumnHeader.cs
- TransformedBitmap.cs
- TimeEnumHelper.cs
- FolderBrowserDialogDesigner.cs
- Message.cs
- Frame.cs
- SHA1CryptoServiceProvider.cs
- ChannelAcceptor.cs
- RadioButton.cs
- DateTimeOffset.cs
- LogicalExpr.cs
- CapacityStreamGeometryContext.cs
- PipelineModuleStepContainer.cs
- Descriptor.cs
- WindowsSlider.cs
- BStrWrapper.cs
- CompilerState.cs
- TimelineGroup.cs
- SchemaSetCompiler.cs
- RuleSettingsCollection.cs
- InternalRelationshipCollection.cs
- ExpressionContext.cs
- SplineKeyFrames.cs
- AttributeAction.cs
- cookiecontainer.cs
- LinkButton.cs
- WebBrowser.cs
- ComboBoxItem.cs
- SerializationHelper.cs
- XhtmlMobileTextWriter.cs
- FunctionCommandText.cs
- XhtmlBasicPanelAdapter.cs
- SiteMembershipCondition.cs
- LogicalTreeHelper.cs
- Timer.cs
- AbstractSvcMapFileLoader.cs
- SystemEvents.cs
- MultiSelectRootGridEntry.cs
- TypeConverter.cs
- SystemColorTracker.cs
- SqlMethods.cs
- AuthenticationConfig.cs
- DataGridViewCellValidatingEventArgs.cs
- CaseInsensitiveComparer.cs
- RangeBase.cs
- RemoteWebConfigurationHost.cs
- XmlAttributeAttribute.cs
- RelationshipDetailsCollection.cs
- OutputScopeManager.cs
- FormsAuthenticationUser.cs
- CriticalFinalizerObject.cs
- OrderingInfo.cs
- ChannelSettingsElement.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- RTLAwareMessageBox.cs
- DispatcherSynchronizationContext.cs
- WebControl.cs
- CompensationDesigner.cs
- DoubleConverter.cs
- UniqueConstraint.cs
- Base64Decoder.cs
- SqlConnectionFactory.cs
- SpotLight.cs
- GeneralTransform.cs
- TypeUtils.cs
- XmlILCommand.cs
- NamespaceTable.cs
- StyleCollection.cs
- DefinitionBase.cs
- TextAction.cs
- RegularExpressionValidator.cs
- LineBreakRecord.cs