How to Implement Semaphores in iOS Application?

前端 未结 4 422
长发绾君心
长发绾君心 2021-02-06 10:52

Is it possible to implement Counting Semaphore in ios application?

相关标签:
4条回答
  • 2021-02-06 11:35

    Like this:

    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
    
    [self methodWithABlock:^(id result){
        //put code here
        dispatch_semaphore_signal(sem);
    
        [self methodWithABlock:^(id result){
            //put code here
            dispatch_semaphore_signal(sem);
        }];
    }];
    
    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    

    Credit http://www.g8production.com/post/76942348764/wait-for-blocks-execution-using-a-dispatch

    0 讨论(0)
  • 2021-02-06 11:41

    Yes, it is possible. There are quite a few synchronization tools available:

    • @synchronized
    • NSLock
    • NSCondition
    • NSConditionLock
    • GCD semaphores
    • pthread locks
    • ...

    I'd suggest reading "Threading Programming Guide" and asking something more specific.

    0 讨论(0)
  • 2021-02-06 11:43

    In Swift 3 you can use a DispatchSemaphore.

    // initialization
    let semaphore = DispatchSemaphore(value: initialValue)
    
    // wait, decrement the semaphore count (if possible) or wait until count>0
    semaphore.wait()
    
    // release, increment the semaphore count
    semaphore.signal()
    
    0 讨论(0)
  • 2021-02-06 11:50

    I was unable to find a native IOS object to do this but it works just fine using the C library:

    #import "dispatch/semaphore.h"
    ...
    dispatch_semaphore_t activity;
    ...
    activity = dispatch_semaphore_create(0);
    ...
    dispatch_semaphore_signal(activity);
    ...
    dispatch_semaphore_wait(activity, DISPATCH_TIME_FOREVER);
    

    Hope that helps.

    0 讨论(0)
提交回复
热议问题