2-6-1-1 QNX编程入门之进程和线程(七)

阅读前言

本文以QNX系统官方的文档英文原版资料“Getting Started with QNX Neutrino: A Guide for Realtime Programmers”为参考,翻译和逐句校对后,对在QNX操作系统下进行应用程序开发及进行资源管理器编写开发等方面,进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引入,以及再到各个重要专题的梳理,大致分为这三个层次部分,分不同的文章进行发布,依据这样的原则进行组织,读者可以更好的查找和理解。


1. 进程和线程

1.4. 关于同步的更多信息

2-6-1-1 QNX编程入门之进程和线程(一)

2-6-1-1 QNX编程入门之进程和线程(二)

2-6-1-1 QNX编程入门之进程和线程(三)

2-6-1-1 QNX编程入门之进程和线程(四)

2-6-1-1 QNX编程入门之进程和线程(五)

2-6-1-1 QNX编程入门之进程和线程(六)

接前面章节内容继续。

前面我们已经看过了以下有关内容:

现在让我们通过讨论以下内容来结束对同步的讨论:

紧接着后面是一个例子。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星原飞火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值