搜索

第 8 章 RHEL for Real Time 中的线程同步机制

download PDF

同时,当两个或多个线程需要同时访问共享资源时,线程会协调使用线程同步机制。线程同步可确保一次只有一个线程使用共享资源。Linux 上使用的三个线程同步机制: Mutexes、Barriers 和 Condition 变量(condvars)。

8.1. Mutexes

mutex 从术语相互排除而出。相互排除对象同步对资源的访问。它是保证一个线程一次只能获取 mutex 的机制。

mutex 算法创建对每个代码的每个部分的串行访问,因此在任何时间点上只能有一个线程执行代码。Mutexes 使用称为 mutex 属性对象的属性对象来创建。它是一个抽象对象,其中包含几个取决于您选择的 POSIX 选项的属性。属性对象通过 pthread_mutex_t 变量定义。对象存储为 mutex 定义的属性。pthread_mutex_init (&my_mutex, &my_mutex_attr), pthread_mutexattr_setrobust ()pthread_mutexattr_getrobust () 功能返回 0。在错误时,它们会返回错误号。

在实时中,您可以保留属性对象来初始化同一类型的更多 mutexes,也可以清理(destroy)属性对象。mutex 在这两种情况下都不受影响。Mutexes 包括标准和高级 mutexes 类型。

标准 mutexes

实时标准 mutexes 是私有、非递归、非攻击和非优先级继承能力 mutexes。使用 pthread_mutex_ init(&my_mutex, &my_mutex_attr)初始化 pthread_mutex_ t 会创建一个标准 mutex。使用标准 mutex 类型时,您的应用程序可能不从 pthreads API 和 RHEL for Real Time 内核提供的优势中获益。

高级 mutexes

使用额外功能定义的 Mutexe 称为高级 mutexes。高级功能包括优先级继承、mutex 的强大行为,以及共享和私有 mutexes。例如,对于强大的 mutexes,请初始化 pthread_mutexattr_setrobust() 函数,可设置 robust 属性。同样,使用 PTHREAD_PROCESS_SHARED 属性允许任何线程在 mutex 上运行,只要线程可以访问其分配的内存。属性 PTHREAD_PROCESS_PRIVATE 设置私有 mutex。

非忙碌 mutext mutex 不会在手动发布前自动发布并保持锁定。

其他资源

  • futex(7) man page
  • pthread_mutex_destroy(P) man page
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.