<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi guys</div><div class=""><br class=""></div><div class="">I have recently started adopting lock-free atomics with memory fences, but it seems Swift at this moment does not have any native instruments.</div><div class=""><br class=""></div><div class="">Then I read a thread in the Apple Developer Forum (<a href="https://forums.developer.apple.com/thread/49334" class="">https://forums.developer.apple.com/thread/49334</a>), which an Apple staff claimed that all imported atomic operations are "not guaranteed to be atomic". But for my tests with all optimizations enabled (-Owholemodule and -O),&nbsp;the OSAtomic primitives and stdatomic fences do not seem going wild.</div><div class=""><br class=""></div><div class="">Is these `atomic_*` and `OSAtomic*` primitives really unsafe in Swift as claimed? It doesn't seem like the Swift compiler would reorder memory accesses around a C function call that it wouldn't be able to see through.</div><div class=""><br class=""></div><div class="">P.S. Is any of these primitives available on Linux? It seems the glibc modulemap does not export an `stdatomic` submodule at all.</div><div class=""><br class=""></div><div class="">Best Regards,</div><div class="">Anders</div><div class=""><br class=""></div></div>
</div>
</div></div></body></html>