您的位置:首页 > 理论基础 > 计算机网络

同步——读写锁

2013-05-07 17:39 337 查看
读写锁,又称为共享-独占锁,其类型为pthread_rwlock_t ,静态初始化通过赋值PTHREAD_RWLOCK_INITIALIZER

#include <pthread.h>
int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr); // return 0/errno
int pthread_rwlock_destroy(pthread_rwlock_t *rwptr); // return 0/errno
int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, blocked
int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, blocked
int pthread_rwlock_unlock(pthread_rwlock_t *rwptr); // return 0/errno
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, return EBUSY
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, return EBUSY
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr); // return 0/errno
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr); // return 0/errno
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *valptr); // return 0/errno
int pthread_rwlockattr_getpshared(pthread_rwlockattr_t *attr, int *valptr); // return 0/errno
/*
*valptr = PTHREAD_PROCESS_PRIVATE/PTHREAD_PROCESS_SHARED, as one value-result
*/
  如果pthread_cond_wait调用阻塞,随后被取消,该线程就在持有互斥锁的情况下终止,为处理被取消的可能情况,任何线程可以安装删除清理处理程序

void pthread_cleanup_push(void (*function)(void *), void *arg);
void pthread_cleanup_pop(int execute);

这些处理程序就是发生在调用线程被取消或自愿终止的情况下,push的function参数是调用线程被取消时所调用的函数的地址,arg为参数;pop总是删除栈顶的函数,而且若execute不为0,那就调用该函数。

void cancelwait(void* arg)
{
pthread_mutex_t * m = arg;
pthread_mutex_unlock(m);
}
// segment
{
pthread_cleanup_push(cancelwait,(void*)pMutex);
pthread_cond_wait(pCond, pMutex);
pthread_cleanup_pop(0);
}

读写锁是在单个进程内的线程间共享时,变量在那个进程中;当读写锁在共享某个内存区的进程间共享时,它要指定PTHREAD_PROCESS_SHARED属性,且该变量应该在共享内存区中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息