gpt4 book ai didi

haskell - 如何使文件 I/O 更具事务性?

转载 作者:行者123 更新时间:2023-12-03 13:36:15 24 4
gpt4 key购买 nike

我正在用 Haskell 编写 CGI 脚本。当用户点击“提交”时,Haskell 程序会在服务器上运行,更新(即读入、处理、覆盖)状态文件。读取然后覆盖有时会导致惰性 IO 出现问题,因为我们可能能够在完成读取输入之前生成较大的输出前缀。更糟糕的是,用户有时会在提交按钮上弹跳,并且进程的两个实例同时运行,争夺同一个文件!

有什么好的实现方式

transactionalUpdate :: FilePath -> (String -> String) -> IO ()

函数('update')在哪里从旧文件内容计算新文件内容?假设“更新”是严格的并不安全,但可以假设它是完全的(对部分更新函数的鲁棒性是一个奖励)。可以同时尝试事务,但如果文件自被读取后已被其他任何人写入,则任何事务都不能更新。在文件访问竞争的情况下,可以中止事务。我们可以假设系统范围内唯一的临时文件名的来源。

我当前的尝试写入临时文件,然后使用系统复制命令进行覆盖。这似乎解决了惰性 IO 问题,但它并没有让我觉得远离比赛是安全的。有没有一种我们可以装瓶的久经考验的配方?

最佳答案

关于haskell - 如何使文件 I/O 更具事务性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7059223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com