c - io_submit writes() 是否保证按顺序执行?

标签 c linux

Linux 中的io_submit() 系统调用是否保证同一进程多个顺序io_submit() 提交的每个操作的执行顺序?

考虑以下示例: 我在文件描述符上提交了一些 write() 操作,例如:

io_prep_pwrite(iocb_ptrs[0],fd,&buf1,buf1_len,buf1_offset);
io_prep_pwrite(iocb_ptrs[1],fd,&buf2,buf2_len,buf2_offset);
io_submit(ctx,2,&iocb_ptrs[0]);

在提交第一个 io_submit 之后,进程立即再次提交数据:

io_prep_pwrite(iocb_ptrs[2],fd,&buf3,buf3_len,buf3_offset);
io_prep_pwrite(iocb_ptrs[3],fd,&buf4,buf4_len,buf4_offset);
io_submit(ctx,2,&iocb_ptrs[2]);

如果buf3_offset正好和buf1_offset的值相同,是否存在buf1中的数据覆盖buf3中的数据的可能性? 假设我们有一个多核系统,并且执行 aio 提交的进程正在 core1 上运行。 (注意:我们只有一个用户进程)首先 io_submit() 发生了,core1 开始将数据写入磁盘。但是随后发生网络中断,core1 必须停止第一个 io_submit() 以参加中断。现在,core2 处于空闲状态,它进行第二次 io_submit() 调用并将数据发送到磁盘。当 core1 从中断返回时,它将继续处理第一个 io_submit() 并且我要求进程首先写入的数据实际上将最后写入。

这会发生吗?

最佳答案

我不知道this manpage发生了什么概述了linux async io,但它明确指出“操作以任意顺序执行,并且可以针对一个文件描述符启动多个操作”。所以看起来你的紧张是有道理的。

关于c - io_submit writes() 是否保证按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235356/

相关文章:

CS50 拼写器 : Unload executes 80, 000,000+ 免费

linux - 在 Linux 中将第 n 个字符更改为随机字符

c++ - munmap、mmap的作用是什么

c++ - 具有动态内存的命名管道策略?

c++ - 使用指针表示法从矩阵读取数据

C:将华氏度转换为摄氏度

c - 关于数组去重的一个bug

c - 引用 char 数组时出现段错误

linux - 如何使用 AWS EFS 和 ReadWriteMany 配置 Persistent Volume Claim?

ruby - 如何输出转义字符?