堕络的小屋

  • 首页
  • 小工具
    • 百度
    • 武器库
    • 堕络的图床
    • 子域名爆破
    • 音乐搜索器
    • 手绘相片制作
    • 微博图片找博主
    • 社会主义核心价值观编码转换
  • 值得一看
    • 黄色
    • 天天优惠
    • 剑灵小助手
  • 系统
    • 高清壁纸
    • 全网优惠券
    • 付费音乐解锁
    • 自动签到框架
    • 我们的足迹系统
    • 网易云音乐签到打卡
    • 全自动网页生成系统
    • 自动采集活动线报
堕络哥哥
一个专业打杂的程序猿
  1. 首页
  2. Linux
  3. 正文

Linux C 互斥量mutex 使用记录

2017年11月16日

一、互斥量 Mutex 主要包含一下几个函数:

1、int pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);

  初始化一个mutex,如果attr为NULL测按默认值初始化,另外还可以在定义互斥量的时候按照下面的方式初始化一个互斥量:

  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  

  一个被lock的信号量,可以直接被恢复到初始态而不产生错误。

2、int pthread_mutex_destroy (pthread_mutex_t *mutex);

  销毁一个 mutex ,只有空闲状态(没有被lock或者lock之后被unlock了)的mutex才可以被销毁,销毁一个被lock的信号量,将产生(16,Device or resource busy)错误;

  被销毁的信号量可以重新被初始化。

3、int pthread_mutex_lock (pthread_mutex_t *mutex) 与int pthread_mutex_trylock (pthread_mutex_t *mutex) 与int pthread_mutex_timedlock (pthread_mutex_t *mutex,const struct timespec *abstime) ;

 

  这三个个函数功能类似,都是锁定(获得)一个互斥量mutex,只不过pthread_mutex_trylock是非阻塞模式的函数会立即返回,pthread_mutex_lock与pthread_mutex_timedlock是阻塞模式;

  pthread_mutex_timedlock的超时等待时间abstime是绝对时间,可以按照如下方式设置:

 

void set_abswaittime(struct timespec*outtime, int ms)
{

  long sec ;
  long usec ;
  struct timeval tnow;
  gettimeofday(&tnow, NULL);
  usec = tnow.tv_usec + ms*1000;
  sec = tnow.tv_sec+usec/1000000;
  outtime->tv_nsec=(usec%1000000)*1000;
  outtime->tv_sec=sec;
}

4、int pthread_mutex_unlock (pthread_mutex_t *mutex);

  释放一个互斥量mutex,如果线程尝试解锁未锁定的互斥体,则pthread_mutex_unlock将按照下表的描述进行操作。

标签: Linux
最后更新:2017年11月16日

chenxing

'

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 堕络的小屋. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang