objective-c - 是否可以在操作系统或编程语言级别强制执行无共享多线程? (OSX, Objective-C )

标签 objective-c cocoa multithreading macos concurrency

我正在尝试在 Objective-C 中实现并发的参与者模型,因为我想避免共享可变状态、锁、信号量等臭名昭著的问题。它可以做到,但它需要真正的 避免意外使用共享状态的纪律。

执行无共享规则的一种方法是使用单独的进程而不是单独的线程,但我认为这太过分了并且会产生令人讨厌的开销。我真正想要的是达到同样目的的东西,但以更轻量级的方式。有什么符合这个描述的吗?

最佳答案

遗憾的是,对您的问题的简短回答是“没有任何操作系统设施可以强制执行比进程更轻量级的无共享”。从理论上讲,这对于静态分析工具(如 clang)来说是一个有趣的方向,但我现在还不知道有任何这样的工具。

也就是说,您是否仔细研究过 Grand Central Dispatch(又名 libdispatch)和 block ?

我自己的经验是,GCD 和 block 极大地简化了遵守无共享并发所需的纪律。您在上面提到您“已经熟悉 NSOperation、 block 等”,但我建议真正坐下来探索您可以用它们做什么。此外,在 NSBlockOperation/NSOperationQueue 抽象之上不容易实现的调度 API 有很多可能的模式,所以不要害怕深入研究底层的 libdispatch API。

关于objective-c - 是否可以在操作系统或编程语言级别强制执行无共享多线程? (OSX, Objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306799/

相关文章:

objective-c - 如何使用performSelector :withObject:afterDelay: on a method with multiple arguments

objective-c - Obj-C IBAction (id)发送者

java - 如何使用 ExecutorService 将两个方法作为线程一个接一个地运行

ios - 导航栏和 ViewControllers View 之间的 NSLayoutConstraint

iOS - 在 UITabBar 上方获得所需的阴影

objective-c - 像 iTunes 一样进行图像拉伸(stretch)和主色选择

java - JTabbedPane中添加的选项卡不显示

Android 单选按钮有时不会被选中

iphone - 核心数据合并行为

ios - <DGTabBarController : 0xd15e2e0> 开始/结束外观转换的不平衡调用