我是靠谱客的博主 淡定大神,最近开发中收集的这篇文章主要介绍linux C 互斥量mutex 使用记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、互斥量 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将按照下表的描述进行操作。

 

参考资料:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html#tag_16_439

 

转载于:https://www.cnblogs.com/villow/p/6933005.html

最后

以上就是淡定大神为你收集整理的linux C 互斥量mutex 使用记录的全部内容,希望文章能够帮你解决linux C 互斥量mutex 使用记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部