首先,我是一名 Objective-C 新手。我的大部分背景都是 Java。另外,由于大多数 Objective-C 问题都围绕 Cocoa,我应该指出这是在GNUStep上。
对于一个学校项目,我正在创建一个简单的基于代理的建模框架。这些框架通常用于模拟复杂系统(如疾病的传播)。我的框架有两个主要对象:一个世界和一个错误。世界由“层”组成,每个层都与一个环形网格相关联。世界可以由虫子组成,每个虫子都有一个 x 和 y 坐标,以及它所属的层。
我的总体想法是用错误填充世界,然后为每个错误触发线程并让他们做他们想做的事。您可以通过子类化主Bug
类并实现act
协议中定义的方法来创建任何类型的错误。这样您就可以拥有各种类型的自定义错误和自定义行为。Bug 应该能够与世界以及彼此交互(从世界中删除错误,向世界添加错误,移动自身)。正如你所看到的,这很快就会走向多线程地狱。
目前我有很多@synchronized
障碍,我很难确保世界始终保持一致的状态。这变得特别困难,因为错误需要与世界通信并对其采取行动,反之亦然。我正在尝试实现一个名为 a 的简单错误RandomBug
,它会在世界各地随机移动。即使这也被证明是困难的,因为我看到了状态可能被破坏或无效的潜在问题。
我开始看一看,NSOperation
因为NSOperationQueue
看起来这可能会让事情变得更容易。我有两个与此有关的问题:
- 是否有一种简单的方法可以
NSOperation
重复执行 s(即,以特定的时间间隔)。 - 如果我将线程上的最大并发操作数设置为 1,我还需要
@synchronized
块吗?在给定时间不会只有一个线程与世界交互吗? - 有没有更好的方法来解决这类问题(多个线程以重复的方式与一个共享资源交互)?
- 我应该完全放弃线程并简单地遍历世界上的错误并以随机方式激活它们吗?