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


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

10.1. mutexes

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

mutex 算法会创建一个对代码的每个部分的串行访问,以便在任何时候都执行代码。mutex 使用称为 mutex 属性对象的属性对象创建。这是一个抽象对象,其中包含多个取决于您选择实现的 POSIX 选项的属性。属性对象通过 pthread_mutex_t 变量定义。对象存储为 mutex 定义的属性。pthread_mutex_init (&my_mutex, &my_mutex_attr), pthread_mutexattr_setrobust ()pthread_mutexattr_getrobust () 函数返回 0。出错时,它们会返回错误号。

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

Standard mutexes

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

Advanced mutexes

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

非滥用 mutex 不会自动发布并保持锁定,直到手动释放为止。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat