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


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

8.1. Mutexes

mutex 从 mutual 排除术语衍生而来。mutual exclude 对象同步对资源的访问。它是确保一个线程一次只能获取 mutex 的机制。

mutex 算法创建对每个代码的每个部分的串行访问,因此在任何时间点上只能有一个线程执行代码。Mutexes 使用称为 mutex 属性对象的属性对象来创建。这是一个抽象对象,其中包含几个依赖于您选择的 POSIX 选项的属性。attribute 对象通过 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_t,使用 pthread_mutex_init(&my_mutex, &my_mutex_attr) 创建一个标准的 mutex。当使用标准 mutex 类型时,您的应用程序可能无法从 pthreads API 和 RHEL for Real Time 内核提供的好处中获益。

Advanced mutexes

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

在手动释放之前,非robust mutex 不会自动发布并保持锁定状态。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部