Linux, 同时多个程序打开一个文件访问并写入,怎么防止数据冲突,即有没有一个程序可以实现排队等候功能。
2个回答
展开全部
你说的是多进程还是多线程?
如果是多线程,可以考虑引入互斥锁(Mutex,Mutual Exclusive Lock)。
获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。
Mutex变量是非0即1的,可看作一种资源的可用数量,初始化时Mutex是1,表示有一个可用资源,加锁时获得该资源,将Mutex减到0,表示不再有可用资源,解锁时释放该资源,将Mutex重新加到1,表示又有了一个可用资源。
注意避免死锁就行了。
如果是多进程(多个不同的程序),可以考虑使用信号量(Semaphore),当然,也可用于同一进程的多线程。
真要具体讲的话,非一两句话可以了事,需要罗列代码,否则太理论化了。建议楼主还是先在网上多看看吧。
如果是多线程,可以考虑引入互斥锁(Mutex,Mutual Exclusive Lock)。
获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。
Mutex变量是非0即1的,可看作一种资源的可用数量,初始化时Mutex是1,表示有一个可用资源,加锁时获得该资源,将Mutex减到0,表示不再有可用资源,解锁时释放该资源,将Mutex重新加到1,表示又有了一个可用资源。
注意避免死锁就行了。
如果是多进程(多个不同的程序),可以考虑使用信号量(Semaphore),当然,也可用于同一进程的多线程。
真要具体讲的话,非一两句话可以了事,需要罗列代码,否则太理论化了。建议楼主还是先在网上多看看吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询