Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Threading / Interlocked.cs / 2 / 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); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StrokeCollectionConverter.cs
- NamespaceCollection.cs
- SelectionItemProviderWrapper.cs
- WorkflowInstanceRecord.cs
- base64Transforms.cs
- IndexingContentUnit.cs
- SHA1Cng.cs
- ToggleButtonAutomationPeer.cs
- WorkflowQueue.cs
- StreamMarshaler.cs
- ColumnMapVisitor.cs
- FileDialogPermission.cs
- PrintPreviewDialog.cs
- BoundField.cs
- XMLSyntaxException.cs
- AccessedThroughPropertyAttribute.cs
- GeneralTransformCollection.cs
- CssClassPropertyAttribute.cs
- DataGridColumnCollection.cs
- DrawingAttributes.cs
- EntityKeyElement.cs
- SqlConnectionString.cs
- HostedNamedPipeTransportManager.cs
- RefType.cs
- MachineSettingsSection.cs
- DataGridColumnHeader.cs
- BufferedWebEventProvider.cs
- EnumerableRowCollection.cs
- TextCompositionEventArgs.cs
- XmlImplementation.cs
- XmlAnyElementAttributes.cs
- PathFigure.cs
- MatrixCamera.cs
- BCryptNative.cs
- GZipStream.cs
- GridEntryCollection.cs
- ReadOnlyDataSource.cs
- AuthenticationConfig.cs
- CrossAppDomainChannel.cs
- FullTextLine.cs
- XmlIlGenerator.cs
- QfeChecker.cs
- HiddenFieldPageStatePersister.cs
- DbCommandDefinition.cs
- AlgoModule.cs
- CngAlgorithmGroup.cs
- RunInstallerAttribute.cs
- BrowserTree.cs
- Atom10FeedFormatter.cs
- DirectoryObjectSecurity.cs
- EventInfo.cs
- TextSelectionHelper.cs
- OdbcConnectionStringbuilder.cs
- ProjectionCamera.cs
- InkCanvasFeedbackAdorner.cs
- WorkflowApplicationAbortedException.cs
- TextUtf8RawTextWriter.cs
- SafeLibraryHandle.cs
- Transform.cs
- ScriptModule.cs
- PathSegment.cs
- ProtocolsConfiguration.cs
- ThreadExceptionEvent.cs
- SingleTagSectionHandler.cs
- DbProviderConfigurationHandler.cs
- FormsAuthenticationUser.cs
- DispatchChannelSink.cs
- DataGridLinkButton.cs
- SolidColorBrush.cs
- ProviderMetadataCachedInformation.cs
- BlockCollection.cs
- documentsequencetextcontainer.cs
- NavigationHelper.cs
- MimePart.cs
- TrackingRecord.cs
- MessageBox.cs
- RequestValidator.cs
- XPathScanner.cs
- ProgressBarHighlightConverter.cs
- AmbientValueAttribute.cs
- ObjectRef.cs
- Vertex.cs
- PropertyPushdownHelper.cs
- SqlInfoMessageEvent.cs
- ThaiBuddhistCalendar.cs
- ControlIdConverter.cs
- FileClassifier.cs
- MenuAdapter.cs
- DataGridViewImageCell.cs
- System.Data.OracleClient_BID.cs
- StaticSiteMapProvider.cs
- VBCodeProvider.cs
- UnsafeNativeMethods.cs
- ExceptionValidationRule.cs
- BCLDebug.cs
- WebZone.cs
- OdbcInfoMessageEvent.cs
- FormViewInsertedEventArgs.cs
- WebUtil.cs
- InstanceDataCollection.cs