2

forkIO を使用してクライアントごとにスレッドを生成するゲーム サーバーがあります。たとえば、クライアントのリストとモンスターのリストをすべてのクライアントと共有したいと考えています。

私の最初のアイデアは、両方のリストを含むデータ型の 1 つの TVar コンテナーを持つことでしたが、2 つのスレッドがクライアントとモンスターを同時に変更すると、その部分が正しいことを理解していれば、そのうちの 1 つをロールバックするとします。これは不要なロールバックになります。

2 番目のアイデアは、リストを TVar にして、それらを引数として渡すことでしたが、コードをクリーンに保ち、さらにリストを追加する場合に簡単に管理できるように、リストをコンテナーに入れたいと思いました。

コンテナにいくつかの TVar を渡す方法はありますか、それとも最初のアイデアを考えすぎですか?

4

1 に答える 1

3

2秒を含む包含データ型を作成するのはどうTVarですか?これは、sを個別の引数として渡すことと大差ありませんTVarが、それらを一緒に「パッケージ化」したままにします。

data GameState = GameState {clients :: TVar [Client], monsters :: TVar [Monster]}
于 2012-04-11T02:53:30.903 に答える