此函数位于nni_plat_init ,是对线程锁的属性初始化
pthread_mutexattr_settype 是一个用于设置互斥锁属性类型的函数。通过这个函数,可以指定互斥锁的类型,以控制不同的锁定行为。
函数原型
#include <pthread.h>
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
参数说明
- attr:指向互斥锁属性对象 (pthread_mutexattr_t) 的指针。
- type:互斥锁的类型。常见的类型包括:
- PTHREAD_MUTEX_NORMAL:普通的互斥锁。当一个线程试图再次锁定一个已经锁定的互斥锁时,会发生死锁。
- PTHREAD_MUTEX_ERRORCHECK:错误检查互斥锁。当一个线程试图再次锁定一个已经锁定的互斥锁时,会返回错误。NNG协议使用的类型就是此类型
- PTHREAD_MUTEX_RECURSIVE:递归互斥锁。同一个线程可以多次锁定一个已经锁定的互斥锁,但必须解锁相同次数。
- PTHREAD_MUTEX_DEFAULT:默认的互斥锁类型,通常等同于 PTHREAD_MUTEX_NORMAL。
返回值
- 0:成功。
- 非零错误码:失败。
示例代码下面是一个如何使用 pthread_mutexattr_settype 的示例:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void* thread_function(void* arg) {
pthread_mutex_t* mutex = (pthread_mutex_t*)arg;
pthread_mutex_lock(mutex);
printf("Thread %ld: Locked the mutex.\n", pthread_self());
// 模拟一些工作
sleep(1);
pthread_mutex_unlock(mutex);
printf("Thread %ld: Unlocked the mutex.\n", pthread_self());
return NULL;
}
int main() {
pthread_mutexattr_t attr;
pthread_mutex_t mutex;
pthread_t thread;
// 初始化互斥锁属性
pthread_mutexattr_init(&attr);
// 设置互斥锁类型为递归锁
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
// 使用属性初始化互斥锁
pthread_mutex_init(&mutex, &attr);
// 创建线程
pthread_create(&thread, NULL, thread_function, (void*)&mutex);
// 主线程也锁定和解锁互斥锁
pthread_mutex_lock(&mutex);
printf("Main thread: Locked the mutex.\n");
// 模拟一些工作
sleep(1);
pthread_mutex_unlock(&mutex);
printf("Main thread: Unlocked the mutex.\n");
// 等待线程结束
pthread_join(thread, NULL);
// 销毁互斥锁和属性
pthread_mutex_destroy(&mutex);
pthread_mutexattr_destroy(&attr);
return 0;
}
在这个例子中,互斥锁 mutex 被配置为递归锁类型 (PTHREAD_MUTEX_RECURSIVE),这允许同一个线程多次锁定互斥锁。主线程和新创建的线程都尝试锁定和解锁互斥锁,以演示其使用。