bbs.chinaunix.net/thread-965755-1-1.html

5.   获得/修改共享互斥量属性:

   #include<pthread.h>
    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,那么只有和
   创建这个互斥锁的线程在同一个进程中的线程才能访问这个互斥锁。
 
6.   获得/修改类型互斥量属性

   #include<pthread.h>
    #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)

ZT 获得/修改共享互斥量属性:pthread_mutexattr_t的更多相关文章

  1. UNIX环境高级编程——互斥量属性

    互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为.缺省的互斥锁属性及其值如下: pshared:         PTHREAD_PROCESS_PRIVATE type:           ...

  2. pthread中互斥量,锁和条件变量

    互斥量 #include <pthread.h> pthread_mutex_t mutex=PTHREAD_MUTEX_INTIIALIZER; int pthread_mutex_in ...

  3. 互斥锁属性PTHREAD_MUTEX_RECURSIVE

    四.互斥锁属性 线程和线程的同步对象(互斥量,读写锁,条件变量)都具有属性.在修改属性前都需要对该结构进行初始化.使用后要把该结构回收.我们用pthread_ mutexattr_init函数对pth ...

  4. Linux:使用互斥量进行线程同步

    基础知识 同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数 ...

  5. linux线程同步(1)-互斥量

    一.概述                                                   互斥量是线程同步的一种机制,用来保护多线程的共享资源.同一时刻,只允许一个线程对临界区进行 ...

  6. Linux系统编程 —互斥量mutex

    互斥量mutex 前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象.为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也称 ...

  7. posix thread互斥量

    互斥量 互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法.使用互斥量的典型顺序如下:1. 创建和初始一个互斥量 2. 多个线程尝试 ...

  8. Linux多线程——使用互斥量同步线程

    前文再续,书接上一回,在上一篇文章: Linux多线程——使用信号量同步线程中,我们留下了一个如何使用互斥量来进行线程同步的问题,本文将会给出互斥量的详细解说,并用一个互斥量解决上一篇文章中,要使用两 ...

  9. pThreads线程(二) 线程同步--互斥量/锁

    互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法. 互斥量对共享数据的保护就像一把锁.在Pthreads中,任何时候仅有一个线程可 ...

随机推荐

  1. tomcat+nginx+redis集群搭建并解决session共享问题。

    1 集群搭建 https://www.cnblogs.com/yjq520/p/7685941.html 2 session共享 https://blog.csdn.net/tuesdayma/art ...

  2. FOCUS数据管理:数据字典与多维模型

    这是我从工厂出来的第五个年头,也是我第一次主动写年终总结: 回想这一年来一点成就都没有,想想都有点后怕:而且每天还是干着同样的事情,容易被新手代替,由于我比较厌烦每天重复的干同样的活,所以我开始思考是 ...

  3. [转]asp.net权限认证:摘要认证(digest authentication)

    本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...

  4. 数据适配:DataAdapter对象概述

    DataAdapter对象可用于执行数据库的命令操作,含有四个不同的操作命令,分别如下:   SelectCommand:用来选取数据源中的记录: InsertCommand:用来向数据源中新插入一条 ...

  5. Intent的使用

    1.普通Intent跳转 Intent intent_intent = new Intent(MainActivity.this,IntentActivity.class); startActivit ...

  6. 一键安装lamp环境出现的问题

    前言:之前安装lamp是独立安装的,安装扩展很方便,现在用这个一键安装包,不知道怎么样,尝试一把. Part1:安装过程中出现的问题 error: utf8_mime2text() has new s ...

  7. Java Future源码分析

    JDK future框架,提供了一种异步编程模式,基于线程池的.将任务runnable/callable提交到线程池executor,返回一个Future对象.通过future.get()获取执行结果 ...

  8. docker 无法启动容器,run容器后状态为restarting

    问题:如题,无法进入容器,docker logs 容器id  发现 哦 ,原来缺少个文件,这些就容易了

  9. equals、==和hashCode

    equals和== ==可以用于基本类型和引用类型:当用于基本类型时,比较值是否相同:当用于引用类型时,比较的是所指向的对象的地址是否相同.如果有包装类型,则先将包装类型转换为基本类型再比较值是否相等 ...

  10. java.lang.StackOverflowError: null

    异常信息 java.lang.StackOverflowError: null at sun.misc.FloatingDecimal$BinaryToASCIIBuffer.dtoa(Floatin ...