如何解决xpc_connection_set_event_handler 的块是否需要同步以避免竞争条件?
我使用 ThreadSanitizer 运行了一个测试代码,它在 xpc_connection_set_event_handler 的块中抛出了一个竞争条件,即使我为连接设置了一个同步队列。
xpc_connection_set_event_handler(conn,^(xpc_object_t event) {
xpc_type_t type = xpc_get_type(event);
if (xpc_get_type(event) == XPC_TYPE_DICTIONARY) {
// race condition here
// WARNING: ThreadSanitizer: data race
// ...
} else {
if (event == XPC_ERROR_CONNECTION_INVALID) {
// Error indicates the peer has closed the connection.
// Tear down any associated data structures.
} else {
// Error indicates that service will terminate soon.
// Flush all buffers,finish all work,etc.
}
xpc_release(peer);
}
});
https://developer.apple.com/documentation/xpc/1448786-xpc_connection_set_target_queue?language=objc: “XPC 运行时保证,当目标队列是串行队列时,事件处理程序块将相对于提交到同一队列的其他块同步执行。当目标队列是并发队列时,事件处理程序块可以并发运行与提交到该队列的其他块,但它永远不会与其他对同一连接的自身调用同时运行"
根据上面的描述看起来应该没有竞争条件,但是为什么我遇到了ThreadSanitizer报告的竞争条件问题?
xpc_connection_set_event_handler 的块是否需要同步以避免竞争条件?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。