我的问题是,当一个进程异常终止时(通过信号,它可能是 SIGKILL 所以我们无法拦截它),是否有任何保证释放其资源的顺序或原子性?特别是,我对文件锁和共享内存感兴趣。
例如:
1)如果进程持有 2 个文件的锁并异常终止,那么另一个试图锁定相同文件的进程是否有可能看到一个文件被锁定而另一个文件被解锁?还是从其他进程的角度来看,释放文件锁的过程是原子的?
如果它不是原子的,是否至少有一个预定义的顺序,文件锁将被终止进程释放(例如,以它们最初被锁定的相反顺序)?
2)我想使用文件锁来确保正确的共享内存初始化 - 映射到共享内存的进程将持有共享锁,并且想要映射到同一共享内存段的新进程将尝试测试该锁以查看是否需要执行初始化(如果需要,我可以稍后提供更多详细信息)。
然而,同样的问题出现在这里:如果一个持有文件锁并映射到共享内存段的进程异常终止,是否有可能在共享内存自动取消映射后,另一个进程仍然会看到文件锁被锁定?还是从其他进程的角度来看,共享内存段的取消映射和文件解锁是原子的?