With a serial queue guarding the function or concurrent queues dumping into a 
serial target queue, DispatchQueue.sync(execute:) can be used as a 
synchronizing primitive suitable for most workflows.  Have you tried exploring 
libDispatch outside of Semaphores?

~Robert Widmann

> On Jun 12, 2017, at 2:10 AM, Erik Aigner via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> In my day to day tasks, synchronization primitives are used quite often. ObjC 
> had the @synchronized attribute for methods. I didn’t find anything about 
> this in swift evolution, so I thought i bring it up here. I think it would 
> quite easily be possible to introduce a synchronized qualifier for 
> struct/class objects that automatically synthesize a semaphore variable on 
> the object and use it to lock said method. Here is an example of how that 
> would work
> 
> Without the synchronized attribute (code written in mail, not compiled):
> 
> class Obj {
> 
>        private let sema = DispatchSemaphore(value: 1)
> 
>       func synchronizedMethod() {
>               sema.wait()
>               defer {
>                       sema.signal()
>               }
>               // do something...
>       }
> }
> 
> With synchronized attribute (the semaphore/wait/deferred-signal is 
> synthesized by Swift automatically)
> 
> class Obj {
> 
>       synchronized func method() {
>               // semaphore is synthesized automatically, do something…
>       }
> }
> 
> 
> Cheers,
> Erik
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

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

Reply via email to