《UNIX环境高级编程》笔记--同步属性

1.互斥量属性

用pthread_mtexattr_init初始化pthread_mutexattr_t结构,用pthread_mutexattr_destroy对该结构进行回收。
#include<pthread.h>
int pthread_mutexattr_init(phtread_mutexattr_t *attr);
int pthread_mutexattr_destroy(phtread_mutexattr_t *attr);
//成功则返回0,否则返回错误编号。
pthread_mutexattr_init函数用默认的互斥量属性初始化pthread_mutexattr_t结构。
值得注意的两个属性是进程共享属性和类型属性。

1.1.进程共享属性

在进程中,多个线程可以访问同一个同步对象,这是默认的行为,在这种情况下,进程共享互斥量属性需要设置为
PTHREAD_PROCESS_PRIVATE。
存在这样的机制,允许多个线程访问共享数据一样,多个进程访问共享数据通常也需要同步,如果进程共享互斥属性
设置为PTHREAD_PROCESS_SHARED,从多个进程共享的内存区域中分配的互斥量就可以用于这些进程的同步。
可以使用pthread_mutexattr_getpshared函数查询pthread_mutexattr_t结构,得到它的进程共享属性,可以用
pthread_mutexattr_setpshared函数修改进程共享属性。
#include<pthread.h>
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict attr, int * restrict pshared);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
//成功返回0,否则返回错误编号。

1.2.类型互斥量属性

类型互斥量属性控制着互斥量的特性。POSIX.1定义了四种类型:
PTHREAD_NORMAL类型是标准的互斥量类型,并不做任何特殊的错误检查和死锁检测。
PTHREAD_MUTEX_ERRORCHECK互斥量类型提供错误检查。
PTHREAD_MUTEX_RECURSIVE互斥量类型允许同一个线程在互斥量解锁之前对该互斥量进行多次加锁。用一个递归互斥
量维护锁的计数,在解锁的次数和加锁相同的情况下才能释放锁。
PTHRED_MUTEX_DEFAULT类型可以用于请求默认语义。操作系统在实现它时可以把这种类型自由地映射到其他类型。
例如在linux中,这种类型映射为普通的互斥量类型。
可以使用pthread_mutexattr_gettype函数得到互斥量类型属性,用pthread_mutexattr_settype函数修改互斥量类型属性。
#include<pthread.h>
int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict attr, int *restrict type);
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
//成功返回0,否则返回错误编号

2.读写锁属性

读写锁也有属性,使用pthread_rwlockattr_init初始化pthread_rwlockattr_t结构,用pthread_rwlockattr_destroy回收结构。
#include<pthread.h>
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
//成功则返回0,否则返回错误编号
读写锁支持的唯一属性是进程共享属性,该属性与互斥量的进程共享属性相同,就像互斥量的进程共享属性一样。用一对函数
来读取和设置读写锁的进程属性。
#include <pthread.h>
int pthread_rwlockattr_getshared(const *pthread_rwlockattr_t *restrict attr, int *restrict pshared);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared);
//成功则返回0,否则返回错误编号。

3.条件变量属性

条件变量也有属性,通过一对函数用于初始化和回收。
#include <pthread.h>
int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);
//成功返回0,否则返回错误编号。
条件变量支持进程共享属性。
#include<pthread.h>
int pthread_condattr_getpshared(const pthread_condattr* restrict attr, int *restrict pshared);
int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared);
//成功则返回0,否则返回错误编号。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值