3.4.2 分配和释放
对称堆的分配和释放函数与C语言标准的分配和释放函数类似,唯一复杂的因素是用户必须确保每个PE在大小和顺序上执行完全相同的分配序列。这样做能确保对称堆的一致性,允许PE使用自身对象的地址定位对称对象。
对称准则:每个PE的分配和释放操作都要按相同的顺序并使用相同的变量来执行。不能保证必要的对称性至少会导致程序挂起,因为分配是全局同步事件。
代码清单3-2通过创建三个对称对象展示了这一准则。数组a和b通过static关键字保证了对称,指针c指向了另一块由shmalloc()分配再由shfree()释放的对称内存(有10个整数的数组)。因为每个PE实例有相同的声明和动态分配序列,所以这个堆是对称的。
代码清单3-3展示了几个违背对称准则之处。注意该程序的主要错误是分配的执行、顺序或大小都一定程度上取决于每个PE上不同的数据。