dispatch_get_specific() & dispatch_queue_set_specific() 线程安全吗?
Are dispatch_get_specific() & dispatch_queue_set_specific() thread safe?
我正在尝试结合使用 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 实际上提供了任何文档,如果它现在归属于他们的 "documentation archive";-(
幸运的是,libdispatch 是开源的,检查 source 确认它们是——它们锁定了关键部分。
HTH
顺便说一句,您的代码片段的第 4-8 行写得更好:
return dispatch_get_specific(&key) == &data;
我正在尝试结合使用 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 实际上提供了任何文档,如果它现在归属于他们的 "documentation archive";-(
幸运的是,libdispatch 是开源的,检查 source 确认它们是——它们锁定了关键部分。
HTH
顺便说一句,您的代码片段的第 4-8 行写得更好:
return dispatch_get_specific(&key) == &data;