Некоторая часть разделяемой памяти, измененная в критическом разделе, состоит из значительного объема данных, однако только небольшая ее часть изменяется за один проход (например, растровое изображение свободной памяти). Как убедиться, что при прерывании/уничтожении программы данные остаются в согласованном состоянии. Любые предложения, отличные от двух копий (например, копия & своп в примере ниже или с каким-то сегментом отката)?Атомные операции с данными критического сечения
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
Вы имеете в виду убийство процесса средней модификации? – WhozCraig