[io]线程——互斥(函数具体操作)

创建并初始化初始互斥锁对象  pthread_mytex_init

该函数在POSIX线程库中定义,并且通常在头文件 #include<pthread.h> 中声明。

int pthread_mutex_init(pthread_mutex_t * restrict mutex, pthread_mutexattr_t *attr)

功能:

初始化互斥锁

参数:

mutex:指向互斥锁对象的指针。这个指针不能为 NULL,必须指向一个有效的内存地址

attr:互斥锁属性 // 一般设置为NULL

指向互斥锁属性的指针。如果 attr 为 NULL,则使用默认的互斥锁属性。默认属性通常是快速互斥锁

返回值:

成功初始化互斥锁:0

初始化失败 :-1

#include<pthread.h>
int main()
{ pthread_mutex_t mutex;//创建并初始化互斥锁 
  if(pthread_mutex_init(&mutex,NULL)!=0)//0为成功;非0不成功
  perror("err");
   return -1;
}
/互斥锁进行线程同步操作
pthread_mutex_destroy(&mutex);//销毁互斥锁
return 0;
}

int pthread_mutex_lock(pthread_mutex_t *mutex)

功能:

用于多线程编程中的互斥锁操作函数,其主要目的是确保同一时刻只有一个线程能够访问某一资源

参数:

mutex:互斥锁

返回值:

成功 :0      成功锁定互斥锁后会返回零

失败 :-1  (例如互斥锁已被锁定或出现死锁情况)会返回非零错误码

当一个线程尝试使用 pthread_mutex_lock 锁定一个已经被其他线程占用的互斥锁时,该线程会进入阻塞状态,直到该互斥锁变为可用为止。一旦互斥锁被当前线程成功锁定,该线程就成为该互斥锁的当前所有者,并且在释放该互斥锁之前,它将保持对该锁的所有权。

int pthread_mutex_unlock(pthread_mutex_t *mutex)

功能:

释放互斥锁

参数:

mutex:互斥锁(取地址)

返回值:

成功 0

失败 -1

#include<pthread.h>
pthread_mutex_t mutex;//初始化互斥锁
int result = pthread_mutex_init(&mutex,NULL);//创建并初始化互斥锁
if(result!=0)//判断是否创建成功
{
printf("pthread mutex init err");
exit(0);
}

result=pthread_mutex_lock(&mutex);//进入临界区前获取互斥锁
if(result!=0)//容错
{
printf("fail lock mutex");
exit(1);
}
///执行 临界区代码
int value =10;
value+=1;
//释放互斥锁
result = pthread_mutex_unlock(&mutex);
if(result!=0)//错误处理
{
printf("fail unlock mutex:%s\n",pthread_strerror(result));
exit(0);
}

int pthread_mutex_destroy(pthread_mutex_t *mutex)

功能:

销毁互斥锁

参数mutex:mutex 是需要销毁的互斥锁变量指针

返回值:

如果互斥锁被成功销毁,该函数返回0;

否则返回一个非零错误码

总结:pthread_mutex_destroy 是一个线程同步函数,用于销毁互斥锁并释放其占用的资源。在使用此函数之前,必须确保互斥锁没有被任何线程持有,并且对于动态分配的互斥锁,在释放内存前应先销毁互斥锁。成功销毁后,互斥锁变为未初始化状态,可以重新初始化以供再次使用

销毁互斥锁注意:

  1. 互斥锁状态:互斥锁必须处于解锁状态(即没有任何线程持有该互斥锁),否则调用 pthread_mutex_destroy 将导致未定义行为。
  2. 资源释放:对于动态分配的互斥锁,在释放内存前需要先调用 pthread_mutex_destroy 来销毁互斥锁,以确保资源正确释放。
  3. 再初始化:销毁后的互斥锁可以重新通过 pthread_mutex_init 进行初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值