创建并初始化初始互斥锁对象 pthread_mytex_init
>
中声明。
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
是一个线程同步函数,用于销毁互斥锁并释放其占用的资源。在使用此函数之前,必须确保互斥锁没有被任何线程持有,并且对于动态分配的互斥锁,在释放内存前应先销毁互斥锁。成功销毁后,互斥锁变为未初始化状态,可以重新初始化以供再次使用
销毁互斥锁注意:
- 互斥锁状态:互斥锁必须处于解锁状态(即没有任何线程持有该互斥锁),否则调用
pthread_mutex_destroy
将导致未定义行为。 - 资源释放:对于动态分配的互斥锁,在释放内存前需要先调用
pthread_mutex_destroy
来销毁互斥锁,以确保资源正确释放。 - 再初始化:销毁后的互斥锁可以重新通过
pthread_mutex_init
进行初始化