CD
не очень понимаю, что вас побудило это у меня спросить?
Size: a a a
CD
NP
CD
VK
uint8_t* buf;
.....
var = ((uint32_t*)(buf + 1))[0];
немедленно вызывает сегфолт. При этом, с packed структурами такого никогда не было.NP
R
NP
VK
IS
AZ
CD
YB
YB
AF
uint8_t* buf;
.....
var = ((uint32_t*)(buf + 1))[0];
немедленно вызывает сегфолт. При этом, с packed структурами такого никогда не было.R
static void rwticket_wrlock(rwticket *l)
{
unsigned me = atomic_xadd(&l->u, (1<<16));
unsigned char val = me >> 16;
while (val != l->s.write) cpu_relax();
}
Сначала мы увеличиваем l->s.write с помощью атомарной функции atomic_xadd (побитовыми операциями добиваемся увеличения поля write). Результат увеличения сохраняем в me и получаем далее в val значение того самого write после атомарного инкретемента.l->s.write
условие в цикле не выполняется и мы покидаем lock()R
DF
AF