> On Dec 4, 2016, at 4:53 PM, Andrew Trick via swift-users 
> <swift-users@swift.org> wrote:
> 
> 
>> On Nov 30, 2016, at 5:40 AM, Anders Ha via swift-users 
>> <swift-users@swift.org <mailto:swift-users@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.

-Joe
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to