当前位置: 技术问答>linux和unix
求助。。。怎样保证并发的多线程不要同时操作同一个文件?
来源: 互联网 发布时间:2015-01-02
本文导语: 在linux下面,怎样给文件加锁? 具体情况是这样的: 首先我并发启动了多个线程,这些线程工作的过程中有一个共同的特点:就是他们都需要读取某一个指定的文件,但是这个文件在某一个时刻只能被一个线程拥有...
在linux下面,怎样给文件加锁?
具体情况是这样的:
首先我并发启动了多个线程,这些线程工作的过程中有一个共同的特点:就是他们都需要读取某一个指定的文件,但是这个文件在某一个时刻只能被一个线程拥有,就是说当有一个线程正在读取这个文件的时候,其他线程不能对该文件操作,因该怎么做,才能保证这样呢?
谢谢!
具体情况是这样的:
首先我并发启动了多个线程,这些线程工作的过程中有一个共同的特点:就是他们都需要读取某一个指定的文件,但是这个文件在某一个时刻只能被一个线程拥有,就是说当有一个线程正在读取这个文件的时候,其他线程不能对该文件操作,因该怎么做,才能保证这样呢?
谢谢!
|
你可以使用Posix互斥锁。
static pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;//声明一个互斥锁
然后用
int pthread_mutex_lock(pthread_mutex_t *mptr);//阻塞
或int pthread_mutex_trylock(pthread_mutex_t *mptr);//非阻塞
来加锁。
用
int pthread_mutex_unlock(pthread_mutex_t *mptr);
来解锁。
static pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;//声明一个互斥锁
然后用
int pthread_mutex_lock(pthread_mutex_t *mptr);//阻塞
或int pthread_mutex_trylock(pthread_mutex_t *mptr);//非阻塞
来加锁。
用
int pthread_mutex_unlock(pthread_mutex_t *mptr);
来解锁。
|
封装文件读写函数。在封装的函数中加入线程互斥
|
你可以在每产生一个文件时动态生成Posix互斥锁,自己在程序中维护一个Posix互斥锁的线性表。程序根据此线性表来加锁和解锁。
当然也可以采用一些其他的方法。
当然也可以采用一些其他的方法。
|
在读写文件的时候用临界区保护。可参考:
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
|
原則上這個問題属操作系统管
|
你秩序作一个模块,用一个互斥就行了,但是不同情况下,性能可能受到影响,亚看你的程序对文件的操作时间了
|
最简单的,加一个文件锁就OK啦。