<Type Name="AotInterlocked" FullName="System.Threading.AotInterlocked">
  <TypeSignature Language="C#" Value="public static class AotInterlocked" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit AotInterlocked extends System.Object" />
  <AssemblyInfo>
    <AssemblyName>System.Threading</AssemblyName>
    <AssemblyVersion>1.0.5.34674</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>System.Object</BaseTypeName>
  </Base>
  <Interfaces />
  <Docs>
    <summary>
            Interlocked reference exchanges do not work with the older
            Mono AOT compiler so this type fudges around it using a spinlock.
            This works (probably more slowly) so long as all exchanges are performed
            through this mechanism.
            
            See AOT compiler fixes: 79b99d358b1321759ea3a42f22eaf141aecf0e79 on the mono 2.10 branch
            http://permalink.gmane.org/gmane.comp.gnome.mono.patches/182067
            https://bugzilla.xamarin.com/show_bug.cgi?id=234
            </summary>
    <remarks>To be added.</remarks>
  </Docs>
  <Members>
    <Member MemberName="CompareExchange&lt;T&gt;">
      <MemberSignature Language="C#" Value="public static T CompareExchange&lt;T&gt; (ref T target, T newValue, T comparand);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig !!T CompareExchange&lt;T&gt;(!!T target, !!T newValue, !!T comparand) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34674</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>T</ReturnType>
      </ReturnValue>
      <TypeParameters>
        <TypeParameter Name="T" />
      </TypeParameters>
      <Parameters>
        <Parameter Name="target" Type="T&amp;" RefType="ref" />
        <Parameter Name="newValue" Type="T" />
        <Parameter Name="comparand" Type="T" />
      </Parameters>
      <Docs>
        <typeparam name="T">To be added.</typeparam>
        <param name="target">To be added.</param>
        <param name="newValue">To be added.</param>
        <param name="comparand">To be added.</param>
        <summary>To be added.</summary>
        <returns>To be added.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Exchange&lt;T&gt;">
      <MemberSignature Language="C#" Value="public static T Exchange&lt;T&gt; (ref T target, T newValue);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig !!T Exchange&lt;T&gt;(!!T target, !!T newValue) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34674</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>T</ReturnType>
      </ReturnValue>
      <TypeParameters>
        <TypeParameter Name="T" />
      </TypeParameters>
      <Parameters>
        <Parameter Name="target" Type="T&amp;" RefType="ref" />
        <Parameter Name="newValue" Type="T" />
      </Parameters>
      <Docs>
        <typeparam name="T">To be added.</typeparam>
        <param name="target">To be added.</param>
        <param name="newValue">To be added.</param>
        <summary>To be added.</summary>
        <returns>To be added.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
  </Members>
</Type>
