考虑一个名为makecookie
的可执行文件(普通的旧串行/非并行程序)。我想同时运行它的两个实例(例如,通过打开两个终端),如下所示:
第一航站楼:
~/makecookie vanilla dataToRead.dat
第二终端:
cd ~
mkdir secondJar
ln -s ~/makecookie secondJar/
secondJar/makecookie chocolate dataToRead.dat
第二个参数是配置字符串,第三个参数是要打开和读取的数据文件。结果将输出到终端上的stdout
。
这会导致同一个可执行文件同时执行。这有什么问题吗?为什么或为什么不呢?
答案 0 :(得分:5)
运行同一可执行文件的多个实例不会导致任何问题。在操作系统的眼中,它们是两个不同的过程。每个实例都有自己的页表,文件描述符,堆栈,PID等,它们独立于所有其他实例。
但是当您在不同进程上访问相同资源时,您必须使用任何锁定策略来同步资源访问。例如,写入同一文件的两个实例将导致文件中的混乱,其中一个实例可能在另一个实例的数据中间写入。
从同一个文件读取的两个实例不会有问题,但是当一个写入和其他读取时,结果将是混乱的。注意:每个实例都有自己的读/写指针,它们在读/写时独立于其他实例。
当您使用文件dataToRead.dat
纯粹用于阅读时,您不会遇到任何问题。
如果您已正确同步资源访问权限,则运行多个实例时没有问题。