<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(68,68,68)">I ran:<br>adb shell setprop debug.mono.env "-O=-intrins"<br><br>Is this correct? <br><br>There was no difference in the outcome: When volatile keyword is used, errors occur. When Volatile class is used, no errors were spotted.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(68,68,68)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(68,68,68)">Should I file a bug to the <a href="https://bugzilla.xamarin.com/buglist.cgi?component=JIT&list_id=218467&product=Runtime&resolution=---">Runtime/JIT</a> section?</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(68,68,68)"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;color:rgb(68,68,68)">Where</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 7, 2016 at 11:32 AM, Alex Rønne Petersen <span dir="ltr"><<a href="mailto:alex@alexrp.com" target="_blank">alex@alexrp.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
By the way, I would suggest trying to run the app with something like:<br>
<br>
    MONO_ENV_OPTIONS="-O=-intrins"<br>
<br>
For Android, see here how to set this:<br>
<a href="https://developer.xamarin.com/guides/android/advanced_topics/environment/" rel="noreferrer" target="_blank">https://developer.xamarin.com/guides/android/advanced_topics/environment/</a><br>
<br>
For iOS, you'd need to set this when invoking the AOT compiler. I'm<br>
not really familiar with where you'd need to do this, though.<br>
<br>
This would disable the JIT's intrinsics for the various atomics /<br>
memory model methods in the framework. It would be good to know if<br>
this makes the test case work or if the result is the same, as we<br>
could narrow the problem down to either the JIT's intrinsics or the<br>
fallback C code in the runtime.<br>
<br>
Regards,<br>
Alex<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, Jul 6, 2016 at 5:13 PM, petrakeas <<a href="mailto:petrakeas@gmail.com">petrakeas@gmail.com</a>> wrote:<br>
> According to C#  specification<br>
> <<a href="https://msdn.microsoft.com/en-us/library/ms228593.aspx" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-us/library/ms228593.aspx</a>>  :<br>
><br>
> •       A read of a volatile field is called a volatile read. A volatile read has<br>
> “acquire semantics”; that is, it is guaranteed to occur prior to any<br>
> references to memory that occur after it in the instruction sequence.<br>
> •       A write of a volatile field is called a volatile write. A volatile write<br>
> has “release semantics”; that is, it is guaranteed to happen after any<br>
> memory references prior to the write instruction in the instruction<br>
> sequence.<br>
><br>
> The spec presents  an example<br>
> <<a href="https://msdn.microsoft.com/en-us/library/aa645755(v=vs.71).aspx" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-us/library/aa645755(v=vs.71).aspx</a>>   where<br>
> one thread writes "data" on a non volatile variable and "publishes" the<br>
> result by writing on a volatile variable that acts as a flag. The other<br>
> thread checks the volatile flag and if set, it accesses the non-volatile<br>
> variable that is now *guaranteed* to contain the data.<br>
><br>
> It seems that Mono 4.4 (the one used in Xamarin) does not enforce these<br>
> semantics or in other words does not prevent memory re-ordering in Android<br>
> and iOS that have relaxed memory models due to their CPU.<br>
><br>
> I have created an a test that reproduces the problem in iOS and Android<br>
> Program.cs <<a href="http://mono.1490590.n4.nabble.com/file/n4668111/Program.cs" rel="noreferrer" target="_blank">http://mono.1490590.n4.nabble.com/file/n4668111/Program.cs</a>>  .<br>
><br>
> If the access to the volatile field is replaced by Volatile.Read() and<br>
> Volatile.Write(), then no-problems occur. It seems that Volatile.Read() and<br>
> Volatile.Write() implement half fences in Mono, but the volatile keyword<br>
> does not.<br>
><br>
> Is this a bug?<br>
><br>
><br>
><br>
><br>
> --<br>
> View this message in context: <a href="http://mono.1490590.n4.nabble.com/Volatile-fields-don-t-enforce-acquire-release-semantics-like-Volatile-Read-and-Volatile-Write-tp4668111.html" rel="noreferrer" target="_blank">http://mono.1490590.n4.nabble.com/Volatile-fields-don-t-enforce-acquire-release-semantics-like-Volatile-Read-and-Volatile-Write-tp4668111.html</a><br>
> Sent from the Mono - Dev mailing list archive at Nabble.com.<br>
> _______________________________________________<br>
> Mono-devel-list mailing list<br>
> <a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" rel="noreferrer" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span><font face="verdana, sans-serif"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font size="2" color="#666666">Petros Douvantzis</font></span></p><p style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font size="2" color="#666666">Co-founder</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font size="2" color="#666666">Horizon Video Technologies</font></span></p><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap;background-color:transparent"><font size="2" color="#666666"><a href="http://horizon.camera" target="_blank">horizon.camera</a></font></span><br></p></font></span><br></div></div></div></div>
</div>