在临界区中修改的共享内存的某些部分包含大量数据,但只有一小部分在单次传递中被更改(例如空闲内存页面位图)。如何确保程序中断/终止时数据保持一致状态。除了拥有两个副本(例如下面示例中的副本和交换或具有某种回滚段)之外,还有什么建议吗?
struct some_data{
int a;
int t[100000]; //large number of total data but a few bytes changed in a single pass (eg. free entries bitmap/tree).
};
short int active=0;
some_data section_data[2];
//---------------------------------------------------
//semaphore down
int inactive=active % 2;
section_data[inactive]=section_data[active];
// now, make changes to the section data (section_data[next_active])
active=inactive;
//semaphore up