ZT 获得/修改共享互斥量属性:pthread_mutexattr_t
bbs.chinaunix.net/thread-965755-1-1.html
5. 获得/修改共享互斥量属性:
intpthread_mutexattr_getpshared(const pthread_mutexattr_t *restrictattr, int
*restrictshared );
//!> 获得共享互斥量属性,由shared带出
intpthread_mutexattrattr_ setpshared ( constpthread_mutexattr_t *restrict attr,int
pshared);
//!> 设置共享互斥属性,有shard决定
若成功返回0,若失败返回错误编号。
注意:shared的取值可以是
PTHREAD_PROCESS_SHARED
PTHREAD_PROCESS_PRIVATE
附录:如果互斥锁属性对象的pshared属性被置PTHREAD_PROCESS_SHARED。
那么由这个属性对象创建的互斥锁将被保存在共享内存中,可以被多个进程中的
线程共享。如果pshared属性被置为PTHREAD_PROCESS_PRIVATE,那么只有和
创建这个互斥锁的线程在同一个进程中的线程才能访问这个互斥锁。
#intpthread_mutexattr_settype (pthread_mutexattr_t * attr, intkind);
//!> 设置类型互斥类型
#intpthread_mutexattr_gettype (pthread_mutexattr_t * attr, int *kind);
//!> 获得类型互斥属性
若成功返回0,若失败返回错误编号。
类型:
缺省的互斥锁类型属性是:
PTHREAD_MUTEX_DEFAULT。
合法的类型属性值有:
PTHREAD_MUTEX_NORMAL:
>: 这种类型的互斥锁不会自动检测死锁。
>: 如果一个线程试图对一个互斥锁重复锁定,将会引起这个线程的死锁。
>: 如果试图解锁一个由别的线程锁定的互斥锁会引发不可预料的结果。
>: 如果一个线程试图解锁已经被解锁的互斥锁也会引发不可预料的结果。
PTHREAD_MUTEX_ERRORCHECK:
>: 这种类型的互斥锁会自动检测死锁。
>: 如果一个线程试图对一个互斥锁重复锁定,将会返回一个错误代码。
>: 如果试图解锁一个由别的线程锁定的互斥锁将会返回一个错误代码。
>: 如果一个线程试图解锁已经被解锁的互斥锁也将会返回一个错误代码。
PTHREAD_MUTEX_RECURSIVE:
>: 如果一个线程对这种类型的互斥锁重复上锁,不会引起死锁。
>: 一个线程对这类互斥锁的多次重复上锁必须由这个线程来重复相同数量的解
锁,这样才能解开这个互斥锁,别的线程才能得到这个互斥锁。
>: 如果试图解锁一个由别的线程锁定的互斥锁将会返回一个错误代码。
>: 如果一个线程试图解锁已经被解锁的互斥锁也将会返回一个错误代码。
>: 这种类型的互斥锁只能是进程私有的(作用域属性为
PTHREAD_PROCESS_PRIVATE)
PTHREAD_MUTEX_DEFAULT:
>: 这种类型的互斥锁不会自动检测死锁。
>: 如果一个线程试图对一个互斥锁重复锁定,将会引起不可预料的结果。
>: 如果试图解锁一个由别的线程锁定的互斥锁会引发不可预料的结果。
>: 如果一个线程试图解锁已经被解锁的互斥锁也会引发不可预料的结果。
>: POSIX标准规定,对于某一具体的实现,可以把这种类型的互斥锁定义为其他
类型的互斥锁。
相当注意:
1、互斥量需要时间来加锁和解锁。锁住较少互斥量的程序通常运行得更快。所
以,互斥量应该尽量少,够用即可,每个互斥量保护的区域应则尽量大。
2、互斥量的本质是串行执行。如果很多线程需要领繁地加锁同一个互斥量,则
线程的大部分时间就会在等待,这对性能是有害的。如果互斥量保护的数
据(或代码)包含彼此无关的片段,则可以特大的互斥量分解为几个小的互斥量
来提高性能。这样,任意时刻需要小互斥量的线程减少,线程等待时间就会
减少。所以,互斥量应该足够多(到有意义的地步),每个互斥量保护的区域则
应尽量的少。
3、POSIX线程锁机制的Linux实现都不是取消点,因此,延迟取消类型的线程不
会因收到取消信号而离开加锁等待。
4、线程在加锁后解锁前被取消,锁将永远保持锁定状态。因此如果在关键区段
内有取消点存在,或者设置了异步取消类型,则必须在退出回调函数中解
锁。
5、锁机制不是异步信号安全的,也就是说,不应该在信号处理过程中使用互斥
锁,否则容易造成死锁。

- 0
Linux编程
|
|
查看全部评论 (0)
ZT 获得/修改共享互斥量属性:pthread_mutexattr_t的更多相关文章
- UNIX环境高级编程——互斥量属性
互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为.缺省的互斥锁属性及其值如下: pshared: PTHREAD_PROCESS_PRIVATE type: ...
- pthread中互斥量,锁和条件变量
互斥量 #include <pthread.h> pthread_mutex_t mutex=PTHREAD_MUTEX_INTIIALIZER; int pthread_mutex_in ...
- 互斥锁属性PTHREAD_MUTEX_RECURSIVE
四.互斥锁属性 线程和线程的同步对象(互斥量,读写锁,条件变量)都具有属性.在修改属性前都需要对该结构进行初始化.使用后要把该结构回收.我们用pthread_ mutexattr_init函数对pth ...
- Linux:使用互斥量进行线程同步
基础知识 同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数 ...
- linux线程同步(1)-互斥量
一.概述 互斥量是线程同步的一种机制,用来保护多线程的共享资源.同一时刻,只允许一个线程对临界区进行 ...
- Linux系统编程 —互斥量mutex
互斥量mutex 前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象.为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也称 ...
- posix thread互斥量
互斥量 互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法.使用互斥量的典型顺序如下:1. 创建和初始一个互斥量 2. 多个线程尝试 ...
- Linux多线程——使用互斥量同步线程
前文再续,书接上一回,在上一篇文章: Linux多线程——使用信号量同步线程中,我们留下了一个如何使用互斥量来进行线程同步的问题,本文将会给出互斥量的详细解说,并用一个互斥量解决上一篇文章中,要使用两 ...
- pThreads线程(二) 线程同步--互斥量/锁
互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法. 互斥量对共享数据的保护就像一把锁.在Pthreads中,任何时候仅有一个线程可 ...
随机推荐
- java class load 类加载
1:what is it jvm把描述类的数据从class字节码文件加载到内存,并对数据进行校验.解析.初始化,最终成为jvm直接使用的数据类型 1.ClassNotFoundExcetpion ...
- FPGA加速:面向数据中心和云服务的探索和实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由columneditor 发表于云+社区专栏 作者介绍:章恒--腾讯云FPGA专家,目前在腾讯架构平台部负责FPGA云的研发工作,探索 ...
- jQuery全屏滚动插件fullPage.js中文帮助文档API
jQuery全屏滚动插件fullPage.js中文帮助文档API 发现了一个fullPage.js插件,于是百度了一下,还就是这个插件的作用,其实有很多网站都做了全屏滚动的特效,效果也很好看,今天 ...
- ios开发 学习积累20161024~20161026
打算转ios开发工程师的岗位 今天看了下视频,自己吭呲吭呲几下开始写UI 先把Xcode8 的界面总结下 navigator ['nævɪɡetɚ] 导航器.浏览器 symbol navigator ...
- CentOS添加SSH登录提示
前言 使用阿里云服务器的应该都注意到每次ssh登录后都能看见类似下面这样的欢迎语: Last login:xxxxxxxxxxxxx Welcome to Alibaba Cloud Elastic ...
- linux的环境变量与文件查找
1. 环境变量 1.1 变量 shell 中的变量有不同类型,可参与运算,有作用域限定 变量的作用域即变量的有效范围(比如一个函数中.一个源文件中或者全局范围),在该范围内只能有一个同名变量.一旦离开 ...
- win下环境变量的设置
Windows 和 linux 区别 一.查看所有环境变量的名称和值: Linux下:export Windows下:set 二.根据名称查该环境变量的值: Linux下:echo $环境变量名 比如 ...
- code.google.com certificate error: certificate is for www.google.com
有时候我们会碰到下面错误:code.google.com certificate error: certificate is for www.google.com,类似如下: D:\>go ge ...
- bat批处理中如何获取前一天日期
网上找了好久在批处理中生成前一日期的代码段 但网上找到的代码对 每个月的1号和每年的1号计算前一日期时,总会报错,然后要加很多的逻辑判断 想了想,可以用.net写个EXE程序,用.net实现获取前一日 ...
- php中怎么导入自己写的类
如果写的类是写在当前php文件内,就直接实例化若你的类写在其他的php文件里,就要先用include或require,将类文件引入<?php include("class.php&qu ...
Linux编程女神计划招
Linux多任务编程
深入Linux网络编程(
深入Linux网络编程(
Linux程序设计-POSIX
硬实时Linux(RT-
Linux进程间通信之信
Linux信号机制概述