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
- RepeaterItem.cs
- GACMembershipCondition.cs
- EntityDesignerBuildProvider.cs
- SamlAuthenticationClaimResource.cs
- EntitySet.cs
- Buffer.cs
- QilTernary.cs
- Parser.cs
- SoapMessage.cs
- PersonalizationProviderHelper.cs
- ReaderContextStackData.cs
- TokenBasedSet.cs
- ParseHttpDate.cs
- BufferedMessageData.cs
- IChannel.cs
- CuspData.cs
- GroupItemAutomationPeer.cs
- ControlParameter.cs
- XPathBinder.cs
- FontSizeConverter.cs
- Win32Exception.cs
- CodeTryCatchFinallyStatement.cs
- HMAC.cs
- initElementDictionary.cs
- TTSVoice.cs
- oledbmetadatacollectionnames.cs
- PageHandlerFactory.cs
- ObjectTag.cs
- XmlSchemaDocumentation.cs
- wgx_exports.cs
- SqlProfileProvider.cs
- WebServiceClientProxyGenerator.cs
- DiscoveryEndpointElement.cs
- ImageListUtils.cs
- VirtualDirectoryMappingCollection.cs
- SwitchLevelAttribute.cs
- TypeElement.cs
- XamlToRtfParser.cs
- RawAppCommandInputReport.cs
- FontEmbeddingManager.cs
- DesignerValidatorAdapter.cs
- MimeTypePropertyAttribute.cs
- BaseParser.cs
- HwndMouseInputProvider.cs
- LinkLabel.cs
- Dump.cs
- LockedHandleGlyph.cs
- SqlCommandBuilder.cs
- Freezable.cs
- TemplateBindingExpression.cs
- FileDataSourceCache.cs
- HttpContextWrapper.cs
- FolderBrowserDialog.cs
- DataGridViewTextBoxColumn.cs
- PrintControllerWithStatusDialog.cs
- SoapTypeAttribute.cs
- ServiceDocument.cs
- DocumentGridContextMenu.cs
- PresentationUIStyleResources.cs
- AudioFormatConverter.cs
- TemplateKeyConverter.cs
- ContextStaticAttribute.cs
- OdbcError.cs
- XmlChildEnumerator.cs
- RemotingConfigParser.cs
- PreservationFileReader.cs
- ExitEventArgs.cs
- MetaType.cs
- RootBrowserWindowProxy.cs
- Win32SafeHandles.cs
- User.cs
- CultureTableRecord.cs
- WriterOutput.cs
- ItemType.cs
- RowsCopiedEventArgs.cs
- KeyedHashAlgorithm.cs
- InvalidFilterCriteriaException.cs
- NetSectionGroup.cs
- ObfuscateAssemblyAttribute.cs
- TemplatePropertyEntry.cs
- DownloadProgressEventArgs.cs
- QualificationDataItem.cs
- HttpCookiesSection.cs
- DocumentApplication.cs
- Helpers.cs
- InfoCardMetadataExchangeClient.cs
- DataGridViewColumnCollectionEditor.cs
- QueryGeneratorBase.cs
- XsdBuilder.cs
- GACIdentityPermission.cs
- EnumConverter.cs
- SmtpDigestAuthenticationModule.cs
- WindowsSolidBrush.cs
- AnnotationComponentChooser.cs
- FunctionQuery.cs
- tabpagecollectioneditor.cs
- DataGridViewElement.cs
- Pair.cs
- ICollection.cs
- Compiler.cs