最近要做一个FS多线程优化的项目:初步想法是将原来的静态锁去掉,换成并发性能更好的读写锁。我这里只是做个知识储备。
我们先看下源码:
int __pthread_rwlock_init (rwlock, attr) pthread_rwlock_t *rwlock; const pthread_rwlockattr_t *attr; { const struct pthread_rwlockattr *iattr; iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_attr; rwlock->__data.__lock = 0; rwlock->__data.__flags = iattr->lockkind == PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP; rwlock->__data.__nr_readers = 0; rwlock->__data.__writer = 0; rwlock->__data.__readers_wakeup = 0; rwlock->__data.__writer_wakeup = 0; rwlock->__data.__nr_readers_queued = 0; rwlock->__data.__nr_writers_queued = 0; return 0; }
pthread_rwlock_init初始化锁,这里值得一提的是读写锁的默认属性PTHREAD_RWLOCK_DEFAULT_NP,这个值之间决定__flags字段。
如果你想要用到写优先的特性,所以你必须用到PTHREAD_RWLOCK_PREFER_WRITE