objective-c – 跨线程事件信令的同步等待设计(Obj-C)?

objective-c – 跨线程事件信令的同步等待设计(Obj-C)?,第1张

概述在 Cocoa应用程序中,我有这样的设置: >主线程(M)可以向一些后台“生产者”线程(B)提交请求以完成一些工作,比如项目X上的计算结果. >此后不久,不同的后台线程(C)可能需要计算项目X的结果,并且同步地想要这些结果. 线程C本身可以同步重新完成工作,但如果线程B恰好位于计算项目X的中间,我希望线程C阻塞并从B获得结果.计算结果可以在磁盘,所以数据传递不是问题. 在线程B完成项目X之前阻塞线 @H_502_1@ 在 Cocoa应用程序中,我有这样的设置:

>主线程(M)可以向一些后台“生产者”线程(B)提交请求以完成一些工作,比如项目X上的计算结果.
>此后不久,不同的后台线程(C)可能需要计算项目X的结果,并且同步地想要这些结果.

线程C本身可以同步重新完成工作,但如果线程B恰好位于计算项目X的中间,我希望线程C阻塞并从B获得结果.计算结果可以在磁盘,所以数据传递不是问题.

在线程B完成项目X之前阻塞线程C的最佳方法是什么?

请注意,B进程的项是任意的 – X只是此示例中的许多项之一.我想阻止,直到特定项目X完成.

所以在概念上我想要的是一种线程B的方式,当它开始说“我正在使用X”时设置某种标志,如果C进来并看到那个标志,它等待标志清除,然后得到结果.

不确定我是否能以某种方式将NSLocks发挥到这个角色,或者如果 *** 作系统中存在更好的原语.

任何想法(或潜在的问题重构)欢迎!谢谢.

解决方法 如果可能,请使用NSOperation.它有一个-waitUntilFinished方法,允许进行同步计算.您只需要一些线程安全的存储机制,以便您可以找到正在计算的项目的NSOperation,如果它已经存在 – 例如,NSLock保护NSDictionary. 总结

以上是内存溢出为你收集整理的objective-c – 跨线程事件信令的同步/等待设计(Obj-C)?全部内容,希望文章能够帮你解决objective-c – 跨线程事件信令的同步/等待设计(Obj-C)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存