阅读前言
本文以QNX系统官方的文档英文原版资料“Getting Started with QNX Neutrino: A Guide for Realtime Programmers”为参考,翻译和逐句校对后,对在QNX操作系统下进行应用程序开发及进行资源管理器编写开发等方面,进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引入,以及再到各个重要专题的梳理,大致分为这三个层次部分,分不同的文章进行发布,依据这样的原则进行组织,读者可以更好的查找和理解。
1. 进程和线程
1.4. 关于同步的更多信息
接前面章节内容继续。
前面我们已经看过了以下有关内容:
现在让我们通过讨论以下内容来结束对同步的讨论:
紧接着后面是一个例子。
1.4.1. 读写锁
正如其名称所暗示的那样,读写锁(reader and writer lock)的用途是:资源如果没有被写入器【writer】正在使用,那么可以由多个读取器【reader】进行使用,或者如果资源当前并没有被其他写入器【writer】或读取器【reader】正在使用,那么就允许写入器【writer】进行使用。
这种情况经常发生,因此需要一种专门用于此目的的特殊类型的同步原语。
通常你会有一个由一堆线程进行共享的数据结构体。显然,一次只能有一个线程写入该数据结构体。如果有多个线程在写,那么不同线程可能会覆盖彼此的数据。为了防止这种情况发生,写线程会以排他性的方式获得“rwlock”(读写锁),这意味着它可以且只有它可以访问该数据结构体。请注意,访问的排他性是通过自愿方式严格控制的。这取决于系统设计人员,以确保接触该数据区域的所有线程都通过使用“rwlock”进行同步。
读取器的情况正好相反。由于读取数据区域是一种非破坏性操作,因此任何数量的线程都可以读取数据(即使另一个线程当前也正在读取该相同数据块)。这里隐含的一点是,当任何线程从数据区读取数据时,没有线程可以写入数据区。否则,读取线程可能会因为读取部分数据而混乱,因为可能被写入线程抢占,然后,当读取线程恢复时,继续读取数据,但是可能会读取到“更新”后的数据。这样就会导致数据不一致。
让我们看一下对rwlock所使用的函数调用。
下面列出的前两个调用,用于为rwlock初始化和销毁库内部存储区域:
int
pthread_rwlock_init (pthread_rwlock_t *lock,
const pthread_rwlock

&spm=1001.2101.3001.5002&articleId=147372629&d=1&t=3&u=3cfa9f43480d470a81a3f8ccd91f1bc2)
782

被折叠的 条评论
为什么被折叠?



