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
- Aes.cs
- QueryParameter.cs
- StoreAnnotationsMap.cs
- HtmlTextArea.cs
- EventlogProvider.cs
- RuntimeHelpers.cs
- ImportDesigner.xaml.cs
- EmptyWorkItem.cs
- ObservableCollection.cs
- GridLengthConverter.cs
- Thickness.cs
- EpmSyndicationContentSerializer.cs
- SqlEnums.cs
- LayoutEvent.cs
- TextTreeRootNode.cs
- RequestQueryProcessor.cs
- ConnectionStringSettings.cs
- Vector.cs
- SiteMapDataSource.cs
- AdornerPresentationContext.cs
- DataBoundControlAdapter.cs
- SamlAttribute.cs
- SettingsAttributes.cs
- ComPersistableTypeElementCollection.cs
- SqlFileStream.cs
- FlowPosition.cs
- XPathNodeIterator.cs
- IERequestCache.cs
- InkCanvasSelection.cs
- SiteMap.cs
- ResourceProviderFactory.cs
- ConstructorBuilder.cs
- ToolboxComponentsCreatingEventArgs.cs
- SendMessageRecord.cs
- FlowLayout.cs
- SafeLibraryHandle.cs
- HtmlTextBoxAdapter.cs
- SelectionListDesigner.cs
- InheritanceUI.cs
- ValidationHelper.cs
- UnknownBitmapEncoder.cs
- RoutingUtilities.cs
- RuleSettings.cs
- PointCollectionValueSerializer.cs
- ComplexType.cs
- Oid.cs
- keycontainerpermission.cs
- EntryPointNotFoundException.cs
- MultiplexingDispatchMessageFormatter.cs
- Debug.cs
- NavigationProperty.cs
- XamlBuildTaskServices.cs
- ListViewItemCollectionEditor.cs
- StdValidatorsAndConverters.cs
- TimeoutHelper.cs
- TypeBuilder.cs
- DataGridViewSelectedColumnCollection.cs
- ServiceProviders.cs
- ChtmlMobileTextWriter.cs
- SerializationAttributes.cs
- MasterPageCodeDomTreeGenerator.cs
- CompositeScriptReference.cs
- XmlSerializerFaultFormatter.cs
- PersonalizationState.cs
- TreeViewItemAutomationPeer.cs
- FormViewPageEventArgs.cs
- DbParameterHelper.cs
- FixedSOMSemanticBox.cs
- XmlDesignerDataSourceView.cs
- ReliabilityContractAttribute.cs
- PixelFormats.cs
- StyleSheetComponentEditor.cs
- XhtmlBasicTextBoxAdapter.cs
- Matrix3D.cs
- ExpressionBuilder.cs
- EventProviderBase.cs
- CngUIPolicy.cs
- ThemeDirectoryCompiler.cs
- SpellerError.cs
- DetailsViewDeleteEventArgs.cs
- Viewport3DVisual.cs
- XmlHelper.cs
- VarRefManager.cs
- Collection.cs
- AttachmentService.cs
- CodeComment.cs
- DataGridViewRowHeaderCell.cs
- GACIdentityPermission.cs
- ParallelTimeline.cs
- TypeInfo.cs
- FilterQueryOptionExpression.cs
- RedirectionProxy.cs
- EditingCoordinator.cs
- StreamingContext.cs
- SizeF.cs
- DynamicEndpoint.cs
- TextBox.cs
- BinarySerializer.cs
- SqlResolver.cs
- BitmapEffectDrawing.cs