使用dispatch_semaphore_t实现event的基本功能

时间:2021-08-31 16:19:38

在Windows平台下, 对线程的同步控制,可以有Critical Section,Mutex,Semaphore,Event 等方式.

在IOS平台,使用GCD进行简单的多线程编程时,可以使用dispatch_semaphore_t进行相应的同步操作.

IOS平台上没有对应的Event这个控制对像. 对于一些适合Event模式的情况下,可以通过dispatch_semaphore_t模拟event(autoReset)的特性.

set:

-(void)set
{  
    dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_NOW);
    dispatch_semaphore_signal(_semaphore);
}

reset:

-(void)reset
{
    dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_NOW);
}

 wait:

-(BOOL)wait:(dispatch_time_t)t
{
    return dispatch_semaphore_wait(_semaphore, t);
}

 

以上模拟的是非安全的autoReset模式的Event. 在要求不高的情况下能简单使用.