有没有办法检查给定文件中是否没有AIO写入?我正在我的Unix课程上做一个项目,它将是一个上下文无关(基于UDP)的国际象棋服务器,所有数据都必须存储在文件中。应用程序将是单进程和单线程的( AIO函数除外)。我的问题是:
1)播放器一向文件发送一些触发aio_write操作的数据,流程开始
2)播放器2请求应该从该文件中读取的当前电路板状态,但是如果之前的aio_write还没有完成,那么这个文件就不是最终文件,所以我还不应该读取,而是等待aio_write结束。
问题是,因为它是上下文无关的,所以我没有来自aio_write调用的aiocb结构。
也可能有来自其他游戏的aio_writes (使用不同的文件),我不需要关心,只有特定的文件当前正在写入。
发布于 2011-06-13 06:33:09
您为什么要使用AIO来完成此任务?AIO的目的不是进程之间的同步。它纯粹是为了防止您的进程在读或写由于磁盘负载(读)或缓存压力(写)而不能立即满足时在内核空间中休眠。对于像国际象棋游戏这样的小事务,AIO的行为应该与正常的read和write IO完全相同:所有操作都将立即完成,尽管开销略高。
如果你的目标是同步文件访问,你也许可以使用fcntl锁,或者mmap你的文件并在文件中的某个地方包含一个互斥量或信号量。
发布于 2011-06-13 06:32:24
它是上下文无关的,这一事实不应该阻止您保留一些状态信息。
您可以保留上下文(我指的是io_context),然后重用它(发送一个读请求并等待它- io_getevents).io_submit说它会将请求推入队列中,所以我相信它会保持操作的顺序。
或者,(如果您发现io_submit不能保持顺序),您可以保持足够的状态,以便知道写操作正在等待,并使用io_getevents等待。那么阅读就是安全的。
我希望我没有误解你的问题。
编辑
看起来I .您可能正在谈论POSIX aio(7)。我说的是真正的异步I/O (libaio.h)。POSIX aio通常是使用线程实现的(这种方式很糟糕)。
无论哪种方式,如果您可以等待事件(我认为您可以),您仍然可以这样做:保留某种状态以声明写入挂起,而当有人想要读取时,则等待写入完成。
https://stackoverflow.com/questions/6325071
复制相似问题