nng协议分析之互斥锁pthread_mutexattr_settype函数

此函数位于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),这允许同一个线程多次锁定互斥锁。主线程和新创建的线程都尝试锁定和解锁互斥锁,以演示其使用。

相关推荐

  1. nng协议分析互斥pthread_mutexattr_settype函数

    2024-07-14 16:12:01       22 阅读
  2. nng协议nng_listen

    2024-07-14 16:12:01       23 阅读
  3. linux 内核同步互斥技术实时互斥

    2024-07-14 16:12:01       46 阅读
  4. threading.Lock()互斥

    2024-07-14 16:12:01       35 阅读
  5. 【面试题】Golang互斥与读写(第七篇)

    2024-07-14 16:12:01       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 16:12:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 16:12:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 16:12:01       57 阅读
  4. Python语言-面向对象

    2024-07-14 16:12:01       68 阅读

热门阅读

  1. 34. AdaGrad算法

    2024-07-14 16:12:01       24 阅读
  2. jQuery标签定位方法

    2024-07-14 16:12:01       26 阅读
  3. LruCache、Glide和SmartRefreshLayout使用总结

    2024-07-14 16:12:01       27 阅读
  4. [NeetCode 150] Merge K Sorted Linked Lists

    2024-07-14 16:12:01       26 阅读
  5. AWS S3 基本概念

    2024-07-14 16:12:01       24 阅读
  6. 大型土木工程项目灾害防御规划与风险评估系统

    2024-07-14 16:12:01       21 阅读
  7. MySQL面试题

    2024-07-14 16:12:01       17 阅读
  8. 【QT系列】快速了解QT怎么用

    2024-07-14 16:12:01       26 阅读
  9. 【Linux 基础】df -h 的输出信息解读

    2024-07-14 16:12:01       25 阅读
  10. 老生常谈的页面渲染流程

    2024-07-14 16:12:01       20 阅读
  11. 虚拟地址空间(Virtual Address Space, VAS)

    2024-07-14 16:12:01       21 阅读
  12. 定期更新github相关hosts

    2024-07-14 16:12:01       22 阅读
  13. 前端面试题日常练-day86 【面试题】

    2024-07-14 16:12:01       16 阅读