Linux下互斥锁的读写实现(linux互斥锁读写)
Linux 下的互斥锁(mutual exclusion)是用来确保在多线程程序中的某段独占访问的结构。它的实现是通过指令级的原子操作实现的,也就是:一旦被保护的资源被一个线程抢占到了,其他线程将无法访问。其实就是实现了 共享资源的 排他性 访问!
有多种方式来实现互斥锁,下面给出 Linux 下效率比较高的两种实现方式:一种是用 read/write locks 来实现,另一种则是用 buffer locks 来实现。
首先来谈谈用 read/write locks 来实现互斥锁的方式。
在 read/write lock 中,它有两个实体,一个是写者 lock(writer lock),另一个是读者 lock(reader lock)。写者 lock 只允许一个线程进行写操作,也就是说:当一个线程获得写者 lock 时,其他线程都不能进行写操作。一旦写者 lock 释放,其他线程就可以开始进行写操作。
读者 lock 和写者 lock 的实现有些类似,但又有不同。当一个线程获得读者 lock 时,其他线程仍然可以获得读者 lock,然而,当一个线程 试图获得写者 lock时,其他线程将无法获得读者 lock,直到写者 lock 释放。
以下是一段用 read/write locks 来实现互斥锁的代码:
int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
另一种实现互斥锁的方式是用 buffer locks 来实现。
buffer locks 也是一种采用指令级原子操作实现的互斥锁,主要特征就是:既可以给可以写的 buffer 加锁,也可以给可以读的 buffer加锁。无论它们有多少个,都是性能友好的。
与 read/write locks 不同,buffer locks 支持以下功能:
首先,一个buffer 可以被多个读者读取(将buffer 加上读者锁),也可以被一个写者写入(将buffer 加上写者锁);
其次,当多个读者读取数据的同时,写者也可以进行写入(不受读者读取的干扰);
最后,当没有线程占用buffer 中的资源时,buffer lock 会自动释放掉。
以下是一段用 buffer locks 来实现互斥锁的代码:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
通过以上介绍,相信大家知道: Linux 下有多种方法来实现互斥锁,如 read/write locks 和 buffer locks。以上就是关于 Linux 下实现互斥锁的读写实现的介绍,希望能给大家带来帮助!