dispatch_semaphore_t信号量的使用

此处crash是因为sema被销毁的时候还在被使用,系统判断sema是否被使用的标志为sema被销毁时的值是否与初始化的值相同。我们可以看一下堆栈信息

sema导致的crash堆栈

我们可以看到这句话"BUG IN CLIENT OF LIBDISPATCH: Semaphore object deallocated while in use"。  sema被销毁时当前的信号量必须大于等于初始化的值。

1.sema的方法:

//dispatch_semaphore_create(value) 参数value必须大于等于0

dispatch_semaphore_t sema = dispatch_semaphore_create(max);

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);此方法会使信号量value-1,当value=0时,调用此方法会阻塞线程

dispatch_semaphore_signal(sema);此方法会发送一个信号量使value+1

2.sema的使用:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容