20. 用纯用户软件实现进程的互斥。对共享资源的访问要互斥进行,进程级的互斥可以通过系统提供的锁和信号量等实现,也可通过纯软件实现。用纯软件实现进程互斥地进入临界段的方法既可用于单处理机环境,也可用于多处理机环境,只要这些处理机能共享同一个存储区,且诸进程对同一主存单元的访问是串行地进行的,除此以外不需要任何硬件、操作系统或程序设计语言的特殊支持。
通过纯软件来实现进程间的互斥所需共享存储区,就要通过共享内存的系统调用shmget、shmat获得。父进程的全局变量在创建子进程后,两者也是分开存放的,故即使父子进程之间也不能通过全局变量进行通信。
线程能有效地增强不同执行程序之间的通信效率。在大多数的操作系统中,独立进程之间的通信需要与核心交互,以提供进程通信所需的机制。可是,由于在同一进程中的线程共享内存,它们之间的通信就不需要调用核心。
由于同一个进程中的所有线程共享进程的资源,它们驻留在相同的地址空间和访问相同的数据。如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时也会获得改变了的结果。故子线程之间就能通过进程的全局变量进行通信,也能用全局变量实现纯软件的安全锁。
试编一个多线程并发的程序,用纯软件来实现对共享资源的访问计数,最简单的互斥共享资源就是共享计数变量。