2010-07-22 20 views
3

我试图在Objective-C中实现并发的actor模型,因为我想避免共享可变状态,锁定,信号量等臭名昭着的问题。它可以完成,但它需要真实纪律,以避免意外使用共享状态。是否可以在操作系统或编程语言级别实施无共享多线程? (OSX,Objective-C)

实施无共享规则的一种方法是使用单独的进程而不是单独的线程,但我认为这是过度杀毒,并且会有令人讨厌的开销。我真正喜欢的是达到相同目标的东西,但是以更轻量级的方式。有什么符合这个描述?

回答

1

不幸的是,你的问题的简短答案是“不,没有操作系统的设施可以强制共享 - 没有比过程轻的重量。”从理论上讲,这对于一个静态分析工具(如clang)来说是一个有趣的方向,但我现在还没有意识到任何这样的工具。

这就是说,你有没有仔细看看Grand Central Dispatch(又名libdispatch)和块?

我自己的经验是,GCD和块显着简化了遵守无共享并发所需的规则。你在上面提到,你“已经熟悉NS操作,块等”,但我建议你真正坐下来,探索你可以用它们做什么。此外,调度API可能存在很多模式,这些模式在NSBlockOperation/NSOperationQueue抽象层之上很难实现,所以不要害怕钻研底层的libdispatch API。

0

不要害怕文档!以通过Concurrency Programming Guide

--Frank

+0

我已经熟悉NSOperation,块等,这不回答我的问题。 – 2010-07-23 02:33:50

+0

然后,提供更好上下文的更简洁的描述(场景)可能会有所帮助。 – 2010-07-24 12:23:01

0

你一个好的方法是消息传递一看NSOperation或更广泛的理解。两个演员或线程设置了他们之间的沟通渠道。这个频道的语义可能很复杂或简单。一个简单的语义是消息是原子性写入和原子消耗的。这可以用来实现无共享方法,并且是许多编程模型的首选方法。

这是Google的GO语言使用的模型。

1

ActorKit

这是一个小测试,但它的作品。应该给你一个启动最坏情况的地方。

+0

谢谢,看起来很有趣。 – 2010-08-11 09:31:03

相关问题