- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试结合使用 dispatch_queue_set_specific() 和 dispatch_get_specific() 方法来检查当前队列是否与目标队列相同。但是由于可以从多个线程调用此方法,因此我需要确保线程安全。所以,我的问题是这些方法是线程安全的。如果不是,我如何确保这里的线程安全?
我在目标队列上使用 dispatch_queue_set_specific() 设置数据,并使用 dispatch_get_specific() 比较当前队列上的数据,如果它们相同,我就在同一个队列上。
static inline (BOOL)is_current_queue(dispatch_queue_t queue) {
int key, data;
dispatch_queue_set_specific(queue, &key, &data, nil);
if (dispatch_get_specific(&key) == &data) {
return YES;
}
return NO;
}
最佳答案
Are dispatch_get_specific() & dispatch_queue_set_specific() thread safe?
对于并发库中的例程来说似乎很可能,但 documentation没有明确指出这一点——感谢 Apple 实际上提供了任何文档,大多数如果它现在被降级到他们的“文档文件”;-(
幸运的是,libdispatch 是开源的,可以查看 source确认它们是——它们锁定了关键部分。
HTH
顺便说一句,您的代码片段的第 4-8 行写得更好:
return dispatch_get_specific(&key) == &data;
关于ios - dispatch_get_specific() 和 dispatch_queue_set_specific() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693960/
我试图弄清楚这两者之间的区别和用法: static void *myFirstQueue = "firstThread"; dispatch_queue_t firstQueue = dispatch
我正在尝试结合使用 dispatch_queue_set_specific() 和 dispatch_get_specific() 方法来检查当前队列是否与目标队列相同。但是由于可以从多个线程调用此方
我很难找到关于如何使用这些函数的好例子。 static void * kQueue1Key = "key1"; static void * kQueue2Key = "key2"; dispatch_
我是一名优秀的程序员,十分优秀!