Jay*_*ade 2 smalltalk seaside pharo
在主页上的pharo海滨应用程序按钮上单击所有数据将保存在一个类名为Test.fl的燃料文件中.如果我在两个实例中一次调用同一个主页,则两个都调用以下代码来保存带有最新更新的Test.fl文件,
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl'**
Run Code Online (Sandbox Code Playgroud)
并获得例外:
CannotDeleteFileException:无法删除旧版本的文件...\Pharo3.0\Test.fl
我已经使用Mutex允许在第一个实例之后执行另一个实例,
mutexBlock := Mutex new.
mutexBlock critical: [
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl' ]
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误
CannotDeleteFileException:无法删除旧版本的文件
请有人帮我解决这个错误.
你的直觉可能是正确的:两个进程试图同时写入(删除)同一个文件.但是,您的Mutex方法无效,因为Mutex每次执行该代码时都会创建一个新方法.你必须存储Mutex在一个类或实例变量(取决于你的代码是如何工作的),使得每一个进程都将使用同一个实例的Mutex.
您的代码看起来像这样:
MyClass class>>serializeProtect
^ SerializeProtect ifNil: [ SerializeProtect := Mutex new ]
self class serializeProtect critical: [
FLSerializer
serialize: self allObjects
toFileNamed: self name , '.fl' ]
Run Code Online (Sandbox Code Playgroud)
注:一般是不会安全初始化一个Mutex懒洋洋地.我只是为了简单起见而在这里做.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |