Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9104
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-23 12:00
个人简介

^_^

文章分类

全部博文(10)

文章存档

2014年(5)

2013年(5)

分类: LINUX

2014-01-15 11:24:39

互斥锁:

1.互斥锁的创建:
pthread_mutex_t mutex;

2.互斥锁初始化与消除:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;----静态初始化(只能使用默认的属性
int  pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)----以动态方式创建互斥锁。(可设置属性
        PTHREAD_MUTEX_INITIALIZER : 创建快速互斥锁,调用线程会阻塞知道拥有互斥锁的线程解锁位置。
       PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:创建递归函数传入值MutexAttr互斥锁,递归互斥锁能够成功的返回并且增加调用线程在互斥上加锁的次数
       PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检索互斥锁,其为快速互斥锁的非阻塞版本。

int pthread_mutex_destroy(pthread_mutex_t *mutex);


3.互斥锁上锁与解锁:
int pthread_mutex_lock(pthread_mutex_t *mutex,)    //互斥锁上锁
int pthread_mutex_trylock(pthread_mutex_t *mutex,) //互斥锁判断上锁
int pthread_mutex_unlock(pthread_mutex_t *mutex,)  //解锁

4.互斥锁属性:
要更改缺省的互斥锁的属性,可以对属性对象进行声明和初始化。通常,互斥锁属性会设置在应用程序开头的某个位置,以便可以快速查找和轻松修改。
pthread_mutexattr_t mattr;
int pthread_mutexattr_init(pthread_mutexattr_t *mattr);
--------mattr 范围可能的值为 PTHREAD_PROCESS_PRIVATE(缺省值) 和 PTHREAD_PROCESS_SHARED。
int pthread_mutexattr_destroy(pthread_mutexattr_t *mattr)
--------对于属性对象,必须首先通过调用 pthread_mutexattr_destroy(3C) 将其销毁,才能重新初始化该对象。


条件变量:

1.条件变量的创建:

pthread_cond_t cond;

2.条件变量的初始化与注销
pthread_cond_t cond=PTHREAD_COND_INITIALIZER  ----静态方式
int (pthread_cond_t *cond, pthread_condattr_t *cond_attr) ----动态方式
int pthread_cond_destroy(pthread_cond_t *cond);

3.条件变量等待和激发:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)----条件等待
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)----计时等待(时间应为绝对时间
        无论哪种等待方式,都必须和一个配合,以防止多个线程同时请求pthread_cond_wait()(或pthread_cond_timedwait(),下同)的(Race Condition)。mutex必须是普通锁(PTHREAD_MUTEX_TIMED_NP)或者适应锁(PTHREAD_MUTEX_ADAPTIVE_NP),且在调用pthread_cond_wait()前必须由本加锁(pthread_mutex_lock()),而在更新条件以前,mutex保持锁定状态,并在线程挂起进入等待前解锁。在条件满足从而离开pthread_cond_wait()之前,mutex将被重新加锁,以与进入pthread_cond_wait()前的加锁动作对应。
激发条件有两种形式,pthread_cond_signal()激活一个等待该条件的线程,存在多个等待线程时按入队顺序激活其中一个;而pthread_cond_broadcast()则激活所有等待线程。

4.条件变量属性:
int pthread_condattr_destroy(pthread_condattr_t *attr);
int pthread_condattr_init(pthread_condattr_t *attr);
阅读(398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~