- 论坛徽章:
- 1
|
回复 思一克
如果这样,那么多个进程不断写同一个文件的同一位置(比如0---1024)能如何交错法? ...
epegasus 发表于 2010-10-21 17:01 ![]()
"应该不会有任何交错.一切符合上面说的.包括跨页块的写"
请问,有代码证据吗?
比如:
线程a write 5个字节(11111)
线程b write 1个字节(2)
如果两次write成功的话,那么你觉得应该不会出现:12111 或者 11211 等等,而可能出现11112,21111的情况?
如果是的话,那么请看下面源码:
asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
{
struct file *file;
ssize_t ret = -EBADF;
int fput_needed;
file = fget_light(fd, &fput_needed);
if (file) {
loff_t pos = file_pos_read(file);
ret = vfs_read(file, buf, count, &pos); --------> b阻塞在这,a也阻塞在这,但a是执行的,b是等待a执行完再执行的
file_pos_write(file, pos); ----->假设a执行到,现在才更新pos,而b现在开始执行在vfs_read(),pos是原来的pos
fput_light(file, fput_needed);
}
return ret;
} |
|