设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: yangff
打印 上一主题 下一主题

[已经过期] [还是让这个帖子在水区吧][Ruby]召唤……求Dump

[复制链接]

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
11
发表于 2011-4-25 23:17:37 | 只看该作者
本帖最后由 苏小脉 于 2011-4-25 23:21 编辑
yangff 发表于 2011-4-25 22:38
可战斗和地图都在主线程,事件在子线程,要给虾米东西上锁呢?


给单个共享的锁上锁,也就是只能是 0 或者 1 的二元信号量。

  1. lock = Mutex.new
  2. # ...
  3. Thread.fork do
  4.   if !lock.locked?
  5.     # ...
  6.   end
  7. end
  8. # ...
  9. lock.lock
  10. # ...
  11. # 战斗过程
  12. # ...
  13. lock.unlock
复制代码
只有事件线程之间异步执行才需要用这种可重入的 Mutex.locked? 判断方式。

1.9 可以直接用 Thread.exclusive do ... end 执行临界区,1.8(RM)的话,在战斗开始前打开 Thread.critical 开关,结束后关闭也能实现相同的效果。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

12
 楼主| 发表于 2011-4-26 00:04:18 | 只看该作者
可是那如果我的代码不是loop而是这样的
showMessage(...)
showMessage(...)
...
showAni(...)
那岂不是要
showMessage(...)if !lock.locked?
showMessage(...) if !lock.locked?
...
showAni(...) if !lock.locked?
甚至showMesage里面也要……
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
13
发表于 2011-4-26 00:25:10 | 只看该作者
本帖最后由 苏小脉 于 2011-4-26 00:25 编辑
yangff 发表于 2011-4-26 00:04
可是那如果我的代码不是loop而是这样的
showMessage(...)
showMessage(...)


可以用 Thread.critical。

  1. Thread.critical = true
  2. # ... 临界区 ...
  3. Thread.critical = false
复制代码
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-2-26 22:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表