检查aio_write是否完成

| 有什么方法可以检查是否没有AIO写入给定文件?我正在我的Unix课程上制作一个项目,该项目将是无上下文(基于UDP)的象棋服务器,所有数据都必须存储在文件中。应用程序将是单进程和单线程的(需要AIO功能)。我的问题是: 1)播放器一发送一些触发aio_write操作的数据到文件,然后过程进行 2)播放器二请求应从该文件读取当前板状态,但是如果先前的aio_write还没有完成,则该文件不是最终文件,因此我不应该阅读,但要等待aio_write结束。 问题是,因为它是上下文无关的,所以我没有aio_write调用的aiocb结构。 也可能会有其他游戏(它们使用不同的文件)的aio_writes,我不需要关心,只有当前正在写入特定文件时才可以。     
已邀请:
        为什么要为此使用AIO? AIO的目的不是进程之间的同步。纯粹是为了防止由于磁盘负载(读取)或缓存压力(写入)而无法立即满足读取或写入操作时,您的进程在内核空间中进入休眠状态。在象棋游戏这样的小事务上,AIO的行为应与正常的“ 0”和“ 1” IO完全相同:所有操作将立即完成,尽管开销会适度增加。 如果您的目标是同步文件访问,则可以使用
fcntl
锁定或
mmap
文件,并在文件中的某个位置包含互斥量或信号量。     
        它的上下文无关的事实不应阻止您保留某些状态信息。 您可以保留上下文(我的意思是
io_context
)并重新使用它(发送读取请求并等待它-
io_getevents
)。 “ 6”表示将请求推送到队列中,因此我相信它将保留操作顺序。 另外,(如果您发现
io_submit
不会保留顺序),您可以保持足够的状态来知道写操作正在等待,然后使用
io_getevents
等待。这样阅读会很安全。 希望我不会误解您的问题。 编辑 看来我确实读错了你的问题。您可能在谈论POSIX
aio(7)
。我说的是真正的异步I / O(
libaio.h
)。 POSIX aio通常是使用线程(很烂)来实现的。 无论哪种方式,如果您可以等待事件(我认为可以),那么您仍然可以这样做:保持某种状态以声明写入未决,并且当有人想要读取时等待写入完成。     

要回复问题请先登录注册