我可以在Linux 2.6中使用最大数量pthread_rwlock

时间:2013-09-24 11:45:09

标签: linux multithreading locking pthreads

我的服务器中的线程之间有很多共享数据。如果我使用一个pthread_rwlock,那么多线程会停止。我使用rwlocks数组:

#define DIR_LOCK_COUNT     32
pthread_rwlock_t dir_mutex[DIR_LOCK_COUNT];

... 
# into main thread initialize pthread_rwlock
for(i=0; i < DIR_LOCK_COUNT; i++){
    if(pthread_rwlock_init(&dir_mutex[i], NULL) != 0) {
        syslog(LOG_ERR, "can't initialize rwlock %i", i);
        return ERR;
    }
}

...
# in the worker thread 

int num = user_id % DIR_LOCK_COUNT;

pthread_rwlock_rdlock(&dir_mutex[num]);
struct dir *dir_trash = dict_search((dict*)user->dirs, &dir_trash_id);
pthread_rwlock_unlock(&dir_mutex[num]);

我有35K用户和16个线程池的数组。我可以使用pthread_rwlock的维度是1024还是更多?

1 个答案:

答案 0 :(得分:0)

pthread_rwlock()的Linux / glibc NPTL实现不使用任何per-lock内核资源。如果首先有足够的内存用于pthread_rwlock_t,那么您可以创建锁定 - pthread_rwlock_init()在NPTL实现中永远不会失败。