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多线程--------深入分析 ThreadLocal 内存泄漏问题

    前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度.但是如果滥用ThreadLocal,就可能 ...

  2. 关于css浮动框是否脱离文档流的分析

    在了解浮动属性之前,首先我们先了解一下html中关于display属性的相关知识. display属性常用的有inline, block, inline-block. inline也就是内联的意思. ...

  3. Charles 抓取 iphone https的设置方式

    1. Charles:  help > SSL Proxying > Install Charles Root Certificate, 2. 将会打开 钥匙串访问 的功能,查找 Char ...

  4. C# 核心语法-反射(反射类型、方法、构造函数、属性,实现可配置可扩展,完成数据库访问类反射封装)

    反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...

  5. facebook 登录开发记录

    1.注册一个 facebook 的账号 2.进入 facebook 开发者的网站.(也可以在 facebook 登录后,点击自己的名字进入用户信息页面,在该页面的底部有个“更多”的链接,点击进去会看到 ...

  6. 屏蔽F1~F12的快捷键的js函数

    function window.onhelp(){return false} //屏蔽F1帮助 /*keyCod从113-123分别禁用了F2-F12键,13禁用了回车键(Enter),8禁用了退格键 ...

  7. 方法执行一次js

    var isFirst = true; $(function () { //一级 $("#City").change(function () { var url = "/ ...

  8. c#参数修饰符-params

    先来理解一下理论知识 params可以设置使用长度可变的参数. 使用要求: 1.在一个方法声明的参数中,只能有一个params修饰符,且被修饰的参数之后不能有其他参数(这一点就像“可选参数必须在必选参 ...

  9. java使用lock实现一个简单的死锁程序

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public ...

  10. 用手机访问管理mysql

    移动办公的情况及需求越来越多,平时MySQL,Oracle,SQLServer等数据库的管理都要通过客户端工具操作,现在有一款基于web网页的软件:TreeSoft数据库管理系统,在服务器布署一套后, ...