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. Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  2. 07 volatile & java 内存模型

    一 从单例模式说起 在singleton 单例模式一文中我们详细了解Java中单例模式的实现,不了解的可以先阅读之. 在该文最后我们给出了双重校验锁来保证既实现线程安全,又能够使性能不受很大的影响的单 ...

  3. [PY3]——时间处理——datetime | calendar

    Python3的日期/时间处理模块 datetime的格式化符号 格式化符号 表示 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 日 ...

  4. 远程服务通讯Service(Remote--AIDL)

    服务端代码:https://github.com/maogefff/AndroidTest/tree/develop-ServiceLocal2 客户端代码:https://github.com/ma ...

  5. Golang之并发资源竞争(读写锁)

    前面的有篇文章在讲资源竞争的时候,提到了互斥锁.互斥锁的根本就是当一个goroutine访问的时候,其他goroutine都不能访问,这样肯定保证了资源的同步,避免了竞争,不过也降低了性能. 仔细剖析 ...

  6. OpenTLD在VS2012和opencv246编译通过

    最近看到了TLD的跟踪视频,觉得很有意思,刚好最近在看行人检测所以就打算下载源码玩一玩,因为源码是Linux版本的(原作者写的是C++和MATLAB的混合编程)C++源码可以在我的博客TLD(一种目标 ...

  7. 玩转树莓派《三》——Scratch

    今天大姨妈折磨了一整个白天,稍微好点,现在打开实验楼,看到有个朋友回答了关于ubuntu上面操作SQL 的时候到处数据到txt文件,被批评没有思考问题,或许吧,虽然那个权限我现在想起确实是可读可写的, ...

  8. MySQL---2、安装与部署

    1.MySQL下载 MySQL版本的选择MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.MySQL Enterprise Edition 企业版本,需付费,可以 ...

  9. 借助 Filter 生成静态页面缓存问题

    如果有些 jsp 页面,在一次 jsp 页面生成后 html 后, 就不太可能需要更新.可以使用缓存机制来解决这个问题. 解决思路如下 1.  定义一个文件夹 pagestaticize,用来存放 j ...

  10. 工作经验:Java 系统记录调用日志,并且记录错误堆栈

    前言:现在有一个系统,主要是为了给其他系统提供数据查询接口的,这个系统上线不会轻易更新,更不会跟随业务系统的更新而更新(这也是有一个数据查询接口系统的原因,解耦).这时,这个系统就需要有一定的方便的线 ...