第3章 共享数据

本章主要内容

  • 共享数据的问题
  • 使用互斥保护数据
  • 保护数据的替代方案

上一章中已经对线程管理有所了解,现在来看一下“共享数据的那些事儿”。

试想,你和朋友合租一个公寓,公寓中只有一个厨房和一个卫生间。当你的朋友在卫生间时,你就会不能使用卫生间了。同样的问题也会出现在厨房,假如:厨房里有一个烤箱,烤香肠的同时,也在做蛋糕,那就可能得到不想要的食物(香肠味的蛋糕)。此外,在公共空间将一件事做到一半时,发现某些需要的东西被别人拿走,或是离开的一段时间内有些东西变动了地方,这都会令我们不爽。

同样的问题也困扰着线程。当线程访问共享数据时,必须定一些规则来限定线程可访问的数据。一个线程更新了共享数据,需要对其他线程进行通知。从易用性的角度,同一进程中的多个线程进行数据共享有利有弊,错误的共享数据是产生bug的主要原因。

本章就以数据共享为主题,避免上述及潜在问题的发生的同时,将共享数据的优势发挥到最大。