问题标签 [libdispatch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
135 浏览

ios - libdispatch(apple-open-source)中的这段代码是什么意思?

我很难理解以下代码:

是什么static void* operator new(size_t) = delete;以及为什么inlinefunc in struct?谁能帮我学习这些代码?这是代码地址

0 投票
1 回答
963 浏览

python - 由于 libdispatch 使子线程崩溃,Python 正在崩溃

我正在使用pynetdicom库来接收和处理医学 dicom 图像。该处理在回调函数“on_association_released”中执行。但是,在接受某些研究时,它会由于看似子线程崩溃而导致 Python 崩溃。

从 OSX 崩溃报告来看,原因似乎是 libdispatch 库,但不确定如何或为什么。

这是功能:

这是来自应用程序日志的最终日志消息:

这是 OSX 崩溃报告:

这是线程 1 崩溃跟踪的顶部:

0 投票
0 回答
142 浏览

c++ - MacOS 上的 OpenCL:使用 AMD Radeon 555 作为 CL 设备时,发布版本中的 SIGABRT,调试版本中 libdispatch 中的 EXC_BAD_INSTRUCTION

我在基于 OpenCL 的应用程序中遇到了 MacOS 上难以追踪的错误。在发布版本中,我的代码在某些时候与 SIGABRT 崩溃,在发布版本中,我得到EXC_BAD_INSTRUCTION一个线程,显然管理一些 lib 调度/GCD 东西(com.apple.libdispatch-manager)。请注意,我自己并没有调用任何与 GCD 相关的东西,所以我假设这是由 Apple OpenCL 运行时在后台完成的。

上下文是一个基准测试应用程序,用于测量排队 CL 命令和接收CL_COMPLETE访问 CL 缓冲区的各种方式的回调之间的延迟。您将在下面找到代码。该错误仅发生在我的 MacBook Pro(AMD Radeon Pro 555 计算引擎)中的三个可用 CL 设备之一。

代码的相关部分:

笔记:

我检查了所有 CL 调用的错误代码,所有 return CL_SUCCESS,只是在上面的代码中删除了它们以获得更好的概览。我标记了我粗略假设发生错误的行,这是基于在发布版本中插入打印语句并观察代码的哪些点在故障发生之前完成的。此外,在语句上方插入打印语句queue.finish();可以让错误消失,因此这可能与时间有关。

更新:

在我假设发生错误的行中插入短暂的睡眠并运行调试构建时,它现在也会触发 SIGABRT。此外,我可以在控制台上找到以下打印件:

问题:

  • 谁能在我的代码中发现一个明显的错误?
  • 如果没有,Apple OpenCL 实施中是否有任何已知错误可能导致此类错误?
0 投票
1 回答
1368 浏览

xcode - Xcode 错误:无法找到 sdk 'macosx.internal'(在目标 'libdispatch' 中)

我正在编译 Apple libdispatch。但是有一个错误错误:(unable to find SDK 'macosx.internal'在目标' libdispatch '中)

有没有人有过这个错误的经验?

0 投票
0 回答
536 浏览

swift4 - GCD 过度使用到底是什么,它是否危险

我最近一直在处理一些代码,我想确保某些任务按顺序运行总是在同一个线程上执行。

作为一个体验这将如何工作的实验,我使用这个示例线程示例创建了我自己的线程

我的代码运行良好,因为我在全局队列上调用了一个方法,然后在我的自定义线程上将一个操作排入队列。

每当我在自定义线程执行期间打印出当前线程时,线程名称都会显示。

(“com.apple.root.default-qos.overcommit”)

我没有收到任何错误或崩溃。

1)这个过度提交到底是什么意思?

2)我是如何使用自己的线程造成的?

3) 在生产代码中看到此消息是否危险?

4)如果它很危险,我如何安全地使用我的自定义线程

更新

在阅读了Swift 论坛上的帖子后,我开始认为过度提交队列是指任何不是来自 Dispatch Queue Global 的线程。

不过,我仍然不是 100% 确定。

0 投票
0 回答
970 浏览

ios - 应用程序因 libdispatch.dylib _dispatch_lane_resume 而崩溃

我从 Firebase Crashlytics 获得了日志,我的应用程序正在崩溃,但不知道它在哪里崩溃。由于崩溃日志也没有提及应用程序崩溃的任何特定行。请建议其他人是否曾经遇到过此类问题。

crash_info_entry_0

LIBDISPATCH 客户端中的错误:对象的过度恢复

crash_info_entry_1

CoreUI:取消分配 _CUIInternalLinkRendition 44703 /System/Library/CoreServices/CoreGlyphs.bundle/Assets.car

崩溃:com.apple.main-thread EXC_BREAKPOINT 0x00000001a64eba34

0 投票
1 回答
79 浏览

swift - 并发队列上的 DispatchSourceTimer

默认情况下,在创建 时DispatchSourceTimer,默认并发队列用于调度定时器事件和取消。

有趣的是,即使在事件处理程序已经触发之后,单次计时器仍然会调度对取消处理程序的调用。

所以考虑下面的代码:

输出:

现在根据文档,调用cancel()应该阻止事件句柄执行,但是假设调用cancel()与内部事件处理程序的调用同步是否安全?

异步取消调度源,防止对其事件处理程序块的任何进一步调用。

我想确保调用其中一个或另一个,但不能同时调用两者,所以我修改了我的代码并将取消处理程序包装到DispatchWorkItem,我从事件处理程序内部取消:

但是,我不太确定这段代码是线程安全的。这段代码是否可能容易出现竞争条件,取消处理程序与事件处理程序同时执行但在相应事件DispatchWorkItem被取消之前执行?

我意识到我可能可以添加锁,或者使用串行队列,我的问题是向熟悉libdispatch内部结构的人提问。

0 投票
1 回答
18 浏览

macos - 如何在 GCD 调度队列中使用`IOConnectCallAsyncScalarMethod`

我正在研究一些用于IOConnectCallAsyncScalarMethod()从 DriverKit 扩展中获取回调的代码。设置非常繁重,包括生成线程、手动创建 a CFMachPortRef、将其添加CFRunLoopSourceRef到 aCFRunLoop然后抽取该运行循环。

为了简化此代码并降低竞争条件的风险,我想在调度队列上获取 IOKit 回调。有什么办法可以做到这一点?