[swift-users] Atomics and Memory Fences in Swift
jgroff at apple.com
Mon Dec 5 11:27:53 CST 2016
> On Dec 4, 2016, at 4:53 PM, Andrew Trick via swift-users <swift-users at swift.org> wrote:
>> On Nov 30, 2016, at 5:40 AM, Anders Ha via swift-users <swift-users at swift.org <mailto:swift-users at swift.org>> wrote:
>> Hi guys
>> I have recently started adopting lock-free atomics with memory fences, but it seems Swift at this moment does not have any native instruments.
>> Then I read a thread in the Apple Developer Forum (https://forums.developer.apple.com/thread/49334 <https://forums.developer.apple.com/thread/49334>), 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), the OSAtomic primitives and stdatomic fences do not seem going wild.
>> 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.
> Did you get an answer to this? I’m not sure what led you to believe the primitives are unsafe in Swift. Importing them doesn’t change their semantics.
If you apply them to memory you allocated manually with malloc/free on UnsafeMutablePointer's allocation methods, then yeah, they should work as they do in C. That's the safest way to use these functions today. Passing a Swift `var` inout to one of these functions does not guarantee that accesses to that var will maintain atomicity, since there may be bridging or reabstracting conversions happening under the hood.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-users