<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.15">
  <compounddef id="class_system_1_1_threading_1_1_aot_interlocked" kind="class" language="C#" prot="public">
    <compoundname>System::Threading::AotInterlocked</compoundname>
      <sectiondef kind="private-static-attrib">
      <memberdef kind="variable" id="class_system_1_1_threading_1_1_aot_interlocked_1a21fa5565da0780b0072668680eff181f" prot="private" static="yes" mutable="no">
        <type><ref refid="struct_system_1_1_threading_1_1_spin_lock" kindref="compound">SpinLock</ref></type>
        <definition>SpinLock System.Threading.AotInterlocked.spinLock</definition>
        <argsstring></argsstring>
        <name>spinLock</name>
        <initializer>= new <ref refid="struct_system_1_1_threading_1_1_spin_lock" kindref="compound">SpinLock</ref>(false)</initializer>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="Source/System.Threading/System.Threading/AotInterlocked.cs" line="17" column="1" bodyfile="Source/System.Threading/System.Threading/AotInterlocked.cs" bodystart="17" bodyend="-1"/>
      </memberdef>
      </sectiondef>
      <sectiondef kind="public-static-func">
      <memberdef kind="function" id="class_system_1_1_threading_1_1_aot_interlocked_1ac8ed3c921d090c9b92070c1a2d05eaa8" prot="public" static="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>T</type>
        <definition>static T System.Threading.AotInterlocked.Exchange&lt; T &gt;</definition>
        <argsstring>(ref T target, T newValue)</argsstring>
        <name>Exchange&lt; T &gt;</name>
        <param>
          <type>ref T</type>
          <declname>target</declname>
        </param>
        <param>
          <type>T</type>
          <declname>newValue</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="Source/System.Threading/System.Threading/AotInterlocked.cs" line="19" column="1" bodyfile="Source/System.Threading/System.Threading/AotInterlocked.cs" bodystart="19" bodyend="37"/>
      </memberdef>
      <memberdef kind="function" id="class_system_1_1_threading_1_1_aot_interlocked_1ac5fd42738208946ba21eb88daa32eea0" prot="public" static="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
        <type>T</type>
        <definition>static T System.Threading.AotInterlocked.CompareExchange&lt; T &gt;</definition>
        <argsstring>(ref T target, T newValue, T comparand)</argsstring>
        <name>CompareExchange&lt; T &gt;</name>
        <param>
          <type>ref T</type>
          <declname>target</declname>
        </param>
        <param>
          <type>T</type>
          <declname>newValue</declname>
        </param>
        <param>
          <type>T</type>
          <declname>comparand</declname>
        </param>
        <briefdescription>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="Source/System.Threading/System.Threading/AotInterlocked.cs" line="39" column="1" bodyfile="Source/System.Threading/System.Threading/AotInterlocked.cs" bodystart="39" bodyend="58"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Interlocked reference exchanges do not work with the older Mono AOT compiler so this type fudges around it using a spinlock. </para>
    </briefdescription>
    <detaileddescription>
<para>This works (probably more slowly) so long as all exchanges are performed through this mechanism.</para>
<para>See AOT compiler fixes: 79b99d358b1321759ea3a42f22eaf141aecf0e79 on the mono 2.10 branch <ulink url="http://permalink.gmane.org/gmane.comp.gnome.mono.patches/182067">http://permalink.gmane.org/gmane.comp.gnome.mono.patches/182067</ulink> <ulink url="https://bugzilla.xamarin.com/show_bug.cgi?id=234">https://bugzilla.xamarin.com/show_bug.cgi?id=234</ulink> </para>
    </detaileddescription>
    <collaborationgraph>
      <node id="5">
        <label>System.Threading.AotInterlocked</label>
        <link refid="class_system_1_1_threading_1_1_aot_interlocked"/>
      </node>
    </collaborationgraph>
    <location file="Source/System.Threading/System.Threading/AotInterlocked.cs" line="16" column="1" bodyfile="Source/System.Threading/System.Threading/AotInterlocked.cs" bodystart="15" bodyend="59"/>
    <listofallmembers>
      <member refid="class_system_1_1_threading_1_1_aot_interlocked_1ac5fd42738208946ba21eb88daa32eea0" prot="public" virt="non-virtual"><scope>System::Threading::AotInterlocked</scope><name>CompareExchange&lt; T &gt;</name></member>
      <member refid="class_system_1_1_threading_1_1_aot_interlocked_1ac8ed3c921d090c9b92070c1a2d05eaa8" prot="public" virt="non-virtual"><scope>System::Threading::AotInterlocked</scope><name>Exchange&lt; T &gt;</name></member>
      <member refid="class_system_1_1_threading_1_1_aot_interlocked_1a21fa5565da0780b0072668680eff181f" prot="private" virt="non-virtual"><scope>System::Threading::AotInterlocked</scope><name>spinLock</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>
