linux 进程间读写锁,linux线程的互斥锁、条件变量、读写锁的属性

互斥量的属性:

互斥量的属性包括两个:进程共享属性和类型属性。

进程共享属性是可选的,可以通过检查系统中是否定义了_POSIX_THREAD_PROCESS_SHARED符号来判断这个平台是否支持进程共享这个属性,也可以在运行时把_SC_THREAD_PROCESS_SHARED参数传递给sysconf进行检查。在进程中,多个线程可以访问同一个同步对象。在这种情况下,进程共享互斥量属性需设置为PTHREAD_PROCESS_PRIVATE;在以后的文章(进程和进程间通信目录下)中会提到,存在这样的机制,允许相互独立的多个进程把同一个内存区域映射它们各自独立的地址空间中。就像多个线程访问共享数据一样,多个进程访问共享数据通常也需要同步。如果进程互斥量属性设置为PTHREAD_PROCESS_SHARED,从多个进程共享的内存区域中分配的互斥量就可以用于这些进程的同步。

类型属性:类型互斥量属性控制着互斥量的特性。有四种类型属性,分别为PTHREAD_MUTEX_TIMED_NP、PTHREAD_RECURSIVE_NP、PTHREAD_MUTEX_ERRORCHECK_NP、PTHREAD_MUTEX_APAPTIVE_NP。因为我用的是cent

os系统,与unix系统由一定区别,主要表现在宏名不同。如下文字段,摘自pthread.h

enum

{

PTHREAD_MUTEX_TIMED_NP,

PTHREAD_MUTEX_RECURSIVE_NP,

PTHREAD_MUTEX_ERRORCHECK_NP,

PTHREAD_MUTEX_ADAPTIVE_NP

#ifdef __USE_UNIX98

,

PTHREAD_MUTEX_NORMAL =

PTHREAD_MUTEX_TIMED_NP,

PTHREAD_MUTEX_RECURSIVE =

PTHREAD_MUTEX_RECURSIVE_NP,

PTHREAD_MUTEX_ERRORCHECK =

PTHREAD_MUTEX_ERRORCHECK_NP,

PTHREAD_MUTEX_DEFAULT =

PTHREAD_MUTEX_NORMAL

#endif

#ifdef __USE_GNU

, PTHREAD_MUTEX_FAST_NP =

PTHREAD_MUTEX_TIMED_NP

#endif

};

互斥量属性初始化和回收:pthread_mutexattr_init()、pthread_mutexattr_destroy()

1、头文件:#include

2、函数原型:int

pthread_mutexattr_init(pthread_mutaxattr_t

*attr);

int  pthread_mutex_destroy(pthread_mutexattr_t

*attr);

3、返回:成功返回0,失败返回错误编号。

互斥量进程共享属性查询和修改:pthread_mutexattr_getpshared()、pthread_mutexattr_setpshared()

1、头文件:#include

2、函数原型:int  pthread_mutexattr_getpshared(const

pthread_mutexattr_t  *restrict

attr,int  *restrict

pshared);

int

pthread_mutexattr_setpshared(pthread_mutexattr_t

*attr,int  pshared);

3、返回:成功时返回0。失败时返回错误编号。

4、参数说明:pshared表示进程的共享属性,pthread_mutexattr_getpshared()表示从pshared带出,pthread_mutexattr_setpshared()表示由pshared传入。

pshared允许值(至少两个吧,其他参数待查,有知道的朋友一定告诉我):

PTHREAD_PROCESS_PRIVATE:允许pthread线程库提供根据有效的互斥量的实现。这在多线程应用程序中是默认情况。在多个进程共享多个互斥量的情况下,pthread线程库可以限制开销较大的互斥量的实现。

PTHREAD_PROCESSED_SHARED:从多个进程共享的内存区域中分配的互斥量就可以用于这些进程的同步。

互斥量类型共享属性查询和修改:pthread_mutexattr_gettype()、pthread_mutexattr_settype()

1、头文件:#include

2、函数原型:int  pthread_mutexattr_gettype(const

pthread_mutexattr_t  *restrict

attr,int  *restrict

type);

int

pthread_mutexattr_settype(pthread_mutexattr_t

*attr,int  type);

3、返回:成功返回0,失败返回错误编号

4、参数:type上文已经由介绍了,我的CENT OS系统的允许的宏是:

PTHREAD_MUTEX_TIMED_NP:类似于unix下的PTHREAD_MUTEX_NORMAL,是标准的互斥量类型,并不做任何特殊的错误检查或死锁检测。在没有解锁前加锁会导致错误。一个线程创建的锁,可以由另外一个线程解除。

PTHREAD_RECURSIVE_NP:类似于unix下的PTHREAD_MUTEX_RECURSIVE,互斥量类型允许同一线程在互斥量解锁之前对该互斥量进行多次加锁。必须在加锁次数和解锁次数相同

的情况下才可以解锁。

PTHREAD_MUTEX_ERRORCHECK_NP:类似于unix下的PTHREAD_MUTEX_ERRORCHECK,互斥量类型提供错误检查。即一个线程加锁后,其他线程不能解锁,只能由它自己解除。

PTHREAD_MUTEX_APAPTIVE_NP:(不管,天知道是干嘛用的,,,呵呵~~~~~)

读写锁属性:仅支持进程共享属性

1、初始化、回收读写锁属性:pthread_rwlockattr_init()、pthread_rwlockattr_destroy()

A】函数原型:int

pthread_rwlockattr_init(pthread_rwlockattr_t

*attr);

int

pthread_rwlockattr_destroy(pthread_rwlockattr_t

*attr);

B】返回:成功返回0,失败返回错误编号。

2、读写锁进程共享属性查询与修改:pthread_rwlockattr_getpshared

()、pthread_rwlockattr_setpshared()

A】函数原型:int  pthread_rwlockattr_getpshared(const

pthread_rwlockattr_t  *restrict

attr,int  *restrict

pshared);

int

pthread_rwlockattr_setpshared(pthread_rwlockattr_t

*attr,int pshared);

B】返回:成功返回0,失败返回错误编号。

条件变量属性:仅支持进程共享属性

1、初始化、回收条件变量属性:pthread_condattr_init()、pthread_condattr_destroy()

A】函数原型:int

pthread_condattr_init(pthread_condattr_t

*attr);

int

pthread_ condattr_destroy(pthread_ condattr_t

*attr);

B】返回:成功返回0,失败返回错误编号。

2、条件变量进程共享属性查询与修改:pthread_condattr_getpshared

()、pthread_condattr_setpshared()

A】函数原型:int

pthread_ condattr_getpshared(const

pthread_ condattr_t

*restrict  attr,int

*restrict  pshared);

int

pthread_ condattr_setpshared(pthread_ condattr_t

*attr,int pshared);

B】返回:成功返回0,失败返回错误编号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值