当前位置: 技术问答>linux和unix
关于用文件实现进程互斥的问题
来源: 互联网 发布时间:2016-06-26
本文导语: 两个进程访问一个互斥文件,我知道可以用文件锁。但是在书上看到一种做法是,创建一个临时文件,这个临时文件只是做为有没有进程在访问互斥文件的标记。每个进程在访问互斥文件之前就不停的用creat去判断临...
两个进程访问一个互斥文件,我知道可以用文件锁。但是在书上看到一种做法是,创建一个临时文件,这个临时文件只是做为有没有进程在访问互斥文件的标记。每个进程在访问互斥文件之前就不停的用creat去判断临时文件是否存在,存在就表示已经有进程在访问互斥文件,直到临时文件不在了,再自己创建一个临时文件,获得互斥文件的访问权。我觉得这种方法是不是有问题,可以保证creat是原子操作吗?不会产生竞争吗?高人给解释一下~~
|
create是原子操作,这一点没有问题;
只是这种方法是在是比较低效率。
其实现在的操作系统都有更高效的方法啊。
比如信号量,文件锁,或者windows下MUTEX。
|
应该是没有问题的,create本身应该不是一个原子操作, 但是两个进程同时调用了creat我想必然其中的一个会返回错误. 要不然OS上面跑了那么多的应用程序,只不定就会有两个进程去创建同一个文件,如果两个都成功的话,那么这两个程序都对这个文件操作不是乱套了.
|
创建一个临时文件,这个临时文件只是做为有没有进程在访问互斥文件的标记。每个进程在访问互斥文件之前就不停的用creat去判断临时文件是否存在,存在就表示已经有进程在访问互斥文件,直到临时文件不在了,
这个是apue上面说的经典办法吧。至于你说是不是原子操作,安全不安全,你只要想想,你又机会在系统下创建2个同名文件吗?只要不可能,那这种锁就是有效的。
这个是apue上面说的经典办法吧。至于你说是不是原子操作,安全不安全,你只要想想,你又机会在系统下创建2个同名文件吗?只要不可能,那这种锁就是有效的。