クリティカル セクションで変更された共有メモリの一部は、かなりの量のデータで構成されていますが、1 回のパスで変更されるのはごく一部です (空きメモリ ページのビットマップなど)。プログラムが中断/強制終了されたときに、データが一貫した状態のままであることを確認する方法。2 つのコピーを持つ以外の提案はありますか (以下の例のコピーと交換、または何らかのロールバック セグメントを持つなど)?
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