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
- KeyValuePair.cs
- ProviderSettingsCollection.cs
- RenderingEventArgs.cs
- TextTreeNode.cs
- PTUtility.cs
- TrackBar.cs
- ValueCollectionParameterReader.cs
- RenderingEventArgs.cs
- ModifierKeysValueSerializer.cs
- XmlSerializerSection.cs
- FixedPageProcessor.cs
- PasswordBoxAutomationPeer.cs
- AbstractDataSvcMapFileLoader.cs
- PropertyInformation.cs
- MouseGestureValueSerializer.cs
- DataBindingHandlerAttribute.cs
- SqlBulkCopyColumnMapping.cs
- RoutedEventArgs.cs
- ContentTextAutomationPeer.cs
- InputScopeNameConverter.cs
- DesignerTextWriter.cs
- Queue.cs
- LineVisual.cs
- StringFunctions.cs
- DataGridViewControlCollection.cs
- SystemIPGlobalStatistics.cs
- TemplateManager.cs
- KnowledgeBase.cs
- ConfigsHelper.cs
- XmlSchemaElement.cs
- SkipQueryOptionExpression.cs
- CodeTypeParameter.cs
- CookielessHelper.cs
- DetailsViewPageEventArgs.cs
- NonDualMessageSecurityOverHttp.cs
- PerfCounters.cs
- DSACryptoServiceProvider.cs
- PeerApplicationLaunchInfo.cs
- HelpKeywordAttribute.cs
- hresults.cs
- AutoScrollExpandMessageFilter.cs
- ExcCanonicalXml.cs
- BaseResourcesBuildProvider.cs
- DeferredElementTreeState.cs
- TemplateBindingExtensionConverter.cs
- BulletDecorator.cs
- __Filters.cs
- SqlDataAdapter.cs
- StreamInfo.cs
- SelectionRangeConverter.cs
- SerializationUtilities.cs
- ProfileManager.cs
- WsatServiceAddress.cs
- SqlEnums.cs
- CornerRadiusConverter.cs
- SymDocumentType.cs
- CodeCommentStatement.cs
- DeclaredTypeValidator.cs
- ProfilePropertySettingsCollection.cs
- GeneralTransform.cs
- FileDataSourceCache.cs
- TlsSspiNegotiation.cs
- TextEditorLists.cs
- ListControl.cs
- TypeConstant.cs
- HtmlValidatorAdapter.cs
- DragDeltaEventArgs.cs
- ReadOnlyDataSourceView.cs
- SharedDp.cs
- AutoResetEvent.cs
- ConfigErrorGlyph.cs
- WebResponse.cs
- _NegotiateClient.cs
- DescriptionCreator.cs
- ContentType.cs
- SamlAttribute.cs
- HttpHandlersInstallComponent.cs
- WmlLiteralTextAdapter.cs
- log.cs
- BlurEffect.cs
- WorkflowServiceBehavior.cs
- ModelFunctionTypeElement.cs
- DetailsViewInsertedEventArgs.cs
- ConnectionModeReader.cs
- ADRole.cs
- ReadOnlyDataSource.cs
- NetPeerTcpBinding.cs
- DiagnosticTraceSource.cs
- SessionStateUtil.cs
- InkCanvasFeedbackAdorner.cs
- BinaryReader.cs
- CallbackHandler.cs
- BypassElementCollection.cs
- JapaneseCalendar.cs
- HtmlToClrEventProxy.cs
- QueryStringConverter.cs
- ColorTranslator.cs
- OleDbErrorCollection.cs
- ToolStripControlHost.cs
- ReferenceTypeElement.cs