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. Critical Regions和Guarded Regions区别

    KeEnterCriticalRegion和KeLeaveCriticalRegion配合使用,能禁止用户模式APC和普通内核模式APC的调用,但是不能禁止特殊内核模式的调用(NormalRoutin ...

  2. sgu-203 Hyperhuffman(哈夫曼编码)

    Hyperhuffman You might have heard about Huffman encoding - that is the coding system that minimizes ...

  3. 十分钟理解Actor模式

    Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing.所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor.共享内存更适合单 ...

  4. R语言数据重塑cbind+rbind+merge+ melt+cast

    R语言中的数据重塑是关于变化的数据分为行和列的方式.大多数R地数据处理的时候是通过将输入的数据作为一个数据帧进行.这是很容易提取一个数据帧的行和列数据,但在某些情况,当我们需要的数据帧的格式是不同的来 ...

  5. C语言20150620

    1-->printf()输出的时候前面没有0 是十进制,前面带0是八进制,前面有0x是十六进制 printf("%d",100):十进制解析 printf("%d& ...

  6. 基于 Annotation 的 Spring AOP 权限验证方法的实现

    1. 配置 applicationContext 在 Spring 中支持 AOP 的配置非常的简单,只需要在 Spring 配置文件 applicationContext.xml 中添加: < ...

  7. C#Winform实时更新数据库信息Demo(使用Scoket)

    最近在贴吧上看到有个提问就是关于怎么在Winform上实时的更新数据 提问者提到的是利用Timer去轮询,但最后经过网上查了下资料,感觉Socket也是可行的, 于是就写了这个Demo 这个Demo的 ...

  8. Git建立独立分支

    前言 在码云建立git项目后默认分支是master, 这里如果直接在码云新建分支, 会指定默认分支; 所以通过git 命令git checkout --orphan 新分支名 创建独立分支 创建 创建 ...

  9. Spring系列之——使用模板快速搭建springboot项目

    1 在官网https://start.spring.io/生成spring boot的模板 2 IDEA导入模板,设置如下勾选项,其他选项卡为默认值 3 idea呈现 4 新增controller类 ...

  10. Java包装类、拆箱和装箱详解

    转载:https://www.cnblogs.com/ok932343846/p/6749488.html 虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程, ...