Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581008
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1559
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-21 00:58
个人简介

锻炼精神,首先要锻炼肉体

文章分类

全部博文(104)

文章存档

2018年(1)

2016年(1)

2015年(101)

2014年(1)

我的朋友

分类: C/C++

2015-02-22 22:15:53

需要使用的方法与变量所在的头文件:
#include

变量:
1. pthread_mutex_t data = PTHREAD_MUTEX_INITIALIZER ;
该变量便是互斥量变量  , 后面赋值的宏变量是用来初始化 pthread_mutex_t 变量
如果将pthread_mutex_t 定义的是 extern 或是 static 类型不能为其赋初始值,
使用这个宏变量便可以将其进行赋值为默认的值。

方法:
1.  int pthread_mutex_init ( pthread_mutex_t *mutex , pthread_mutexattr_t *attr  ) ;
方法功能描述:该方法用来初始化互斥量变量

2. int pthread_mutex_destory ( pthread_mutex_t *mutex  ) ;
方法功能描述:该方法用来销毁互斥量变量

点击(此处)折叠或打开

  1. #include <pthread.h>

  2. typedef struct my_struct_tag
  3. {
  4.     pthread_mutex_t mutex ; // 该变量用来保护变量 value 被互斥访问
  5.     int value ; // 它的互斥访问权限由 mutex 来保护
  6. } my_struct_t ;

  7. my_struct_t data = { PTHREAD_MUTEX_INITIALIZER , 0 } ;

  8. int main ( int argc , char *argv [] )
  9. {
  10.     return 0 ;
  11. }
上面的 PTHREAD_MUTEX_INITIALIZER 是用来为静态类型的 pthread_mutex_t 进行静态赋值,
静态赋值为 pthrad_mutex_t 变量赋值的数值为默认的值。
还可以通过方法 pthread_mutex_init 来为 pthread_mutex_t 进行动态的赋值。


  1. #include <pthread.h>

  2. typedef struct my_struct_tag
  3. {
  4.     pthread_mutex_t mutex ;
  5.     int value ;
  6. } ;

  7. int main ( int argc , char *argv[] )
  8. {
  9.     my_struct_t *data ;
  10.     int status ;
  11.     
  12.     data = malloc (sizeof(my_struct_t))
  13. // 分配大小为 my_struct_t 的空间,然后使用data的指针指向它

  14.     if ( data == NULL )
  15.     {
  16.         printf(" failed to allocate space for data \n") ;
  17.         return -1 ;
  18.     }
  19.     
  20.     status = pthread_mutex_init ( &data->mutex, NULL ) ;
  21. // 调用 pthread_mutex_init 方法来为传入的互斥量变量进行初始化

  22.     if ( status != 0 )
  23.     {
  24.         printf (" failed to execute pthread_mutex_init \n") ;
  25.         return -2 ;
  26.     }
  27.     
  28.     status = pthread_mutex_destory ( &data->mutex ) ;
  29. // 调用 pthread_mutex_destory 来释放互斥量所占用的空间

  30.     if ( status != 0 )
  31.     {
  32.         printf ( "failed to execute pthread_mutex_destory \n")
  33.         return -3 ;
  34.     }
  35.     (void) free ( data ) ;
  36. // 释放指针 data 指向的空间
  37.     return 0 ;
  38. }

  如果使用静态方法创建的 pthread_mutex_t 是静态类型,同时是使用宏变量
 PTHREAD_MUTEX_INITIALIZER 来初始化的,那么该互斥量锁使用的空间
 在方法结束之后会被系统自动的回收
 若是该 pthread_mutex_t 是调用 pthread_mutex_destory 方法初始化的,
 那么需要调用 free 来回收互斥量所占用的空间
  
 使用互斥量比较好的方法便是将互斥量与需要互斥访问的数据变量通过结构体进行关联,
 如果要销毁该互斥量变量,必须保证在这个互斥量上没有现成阻塞在上面

阅读(1001) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~