<div dir="ltr"><div>Hi David,</div><div><br></div><div>I'm not 100% sure, especially semantics,  and I'm studying too.</div><div>I don't have an answer, but I describe the related matters in order to organize my head.</div><div><br></div><div>At first:</div><div>  "memory barrier" ... is order control mechanism between memory accesses.</div><div>  "bound thread"   ... is association mechanism between ffi calls and a specified thread.</div><div><br></div><div>And:</div><div>  "memory barrier"  ... is depend on cpu hardware architecture(x86, ARM, ...).</div><div>  "OS level thread" ... is depend on OS(Linux, Windows, ...). </div><div><br></div><div>Last:</div><div>There are four cases about ffi call [1]:</div><div>  (1) safe ffi call   on unbound thread(forkIO)</div><div>  (2) unsafe ffi call on unbound thread(forkIO)</div><div>  (3) safe ffi call   on bound thread(main, forkOS)</div><div>  (4) unsafe ffi call on bound thread(main, forkOS)</div><div><br></div><div>I think, maybe (2) and (4) have not guarantee with memory ordering.</div><div>Because they might be inlined and optimized.</div><div><br></div><div>If (1) and (3) always use pthread api (or memory barrier api) for thread/HEC context switch,</div><div>they are guarantee.</div><div>But I think that it would not guarantee the full case.</div><div><br></div><div><br></div><div>I feel that order issues are very difficult.</div><div>I think order issues can be safely solved by explicit notation,</div><div>like explicit memory barrier notation, STM,...</div><div><br></div><div><br></div><div>If I have misunderstood, please teach me :-)</div><div><br></div><div><br></div><div>[1]: <a href="http://takenobu-hs.github.io/downloads/haskell_ghc_illustrated.pdf#page=98" target="_blank">http://takenobu-hs.github.io/downloads/haskell_ghc_illustrated.pdf#page=98</a></div><div><br></div><div>Cheers,</div><div>Takenobu</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-05-29 1:24 GMT+09:00 David Turner <span dir="ltr"><<a href="mailto:dct25-561bs@mythic-beasts.com" target="_blank">dct25-561bs@mythic-beasts.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
If I make a sequence of FFI calls (on a single Haskell thread) but<br>
which end up being called from different OS threads, is there any kind<br>
of ordering guarantee given? More specifically, is there a full memory<br>
barrier at the point where a Haskell thread migrates to a new OS<br>
thread?<br>
<br>
Many thanks,<br>
<br>
David<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br></div>