【问题标题】:Container for Haskell TVarsHaskell TVar 的容器
【发布时间】:2012-04-11 00:56:21
【问题描述】:

我有一个游戏服务器,它使用 forkIO 为每个客户端生成一个线程。例如,我想与所有客户共享客户列表和怪物列表。

我的第一个想法是为包含两个列表的数据类型创建一个 TVar 容器,但假设两个线程同时更改客户端和怪物,如果我理解该部分正确,这将回滚其中一个。这将是不必要的回滚。

第二个想法是制作列表 TVar,然后将它们作为参数传递,但如果要添加更多列表,我宁愿将它们放在容器中以保持代码清洁和易于管理。

有没有办法在一个容器中传递几个 TVar 还是我想多了?

【问题讨论】:

    标签: haskell concurrency containers stm


    【解决方案1】:

    创建一个包含 2 个TVars 的包含数据类型怎么样?这与仅将 TVars 作为单独的参数传递没有太大区别,但它将它们“打包”在一起,您似乎更喜欢这样。

    data GameState = GameState {clients :: TVar [Client], monsters :: TVar [Monster]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      相关资源
      最近更新 更多