有什么方法可以检查是否没有 AIO 写入给定文件?我正在我的 Unix 类(class)上做一个项目,它将是一个上下文无关(基于 UDP)的国际象棋服务器,所有数据都必须存储在文件中。应用程序将是单进程和单线程的(AIO 功能除外)。我的问题是:
1)玩家一发送一些数据,触发aio_write操作到文件,并且该过程进行
2)玩家二请求应从该文件读取的当前棋盘状态,但如果先前的 aio_write 尚未完成,则该文件不是最终文件,因此我不应该读取,而是等待 aio_write 结束。
问题是,因为它是上下文无关的,所以我没有来自 aio_write 调用的 aiocb 结构。
此外,还可能存在来自其他游戏(使用不同文件)的 aio_writes,我不需要关心这些内容,仅当特定文件当前正在写入时。
最佳答案
为什么要使用 AIO 来实现此目的? AIO 的目的不是进程之间的同步。这纯粹是为了防止当由于磁盘负载(读)或缓存压力(写)而无法立即满足读或写时,您的进程在内核空间中休眠。对于象棋游戏这样的小事务,AIO 的行为应该与正常的读
和写
IO 完全相同:所有操作都将立即完成,尽管会稍微多一些开销。
如果您的目标是同步文件访问,您也许可以使用 fcntl
锁定或 mmap
您的文件,并在文件中的某处包含互斥锁或信号量。
关于检查aio_write是否完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325071/