Информация об изменениях

Сообщение Re[5]: C++11: Синхронизация - Условные переменные и ложные п от 28.03.2019 7:47

Изменено 28.03.2019 7:48 kotalex

Re[5]: C++11: Синхронизация - Условные переменные и ложные п
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, kotalex, Вы писали:


K>>Да, есть такая функция, которая используется во всех операциях обхода бакета. Можно ссылку на код, который используется именно для отфильтровывания "коллизийных" фьютексов, а не для поиска нужного бакета по ключу ?

W>В ядре linux работа с futex не размазана по куче исходников, а вполне компактно содержится почти целиком в единственном файле. На который уже привёл ссылку в предыдущем сообщении. Пропустил? Ну вот ещё раз: match_futex
W>А вот чуть ниже в этом же файле пример её целевого использования: https://github.com/torvalds/linux/blob/9e98c678c2d6ae3a17cb2de55d17f69dddaa231b/kernel/futex.c#L1602-L1616
W>Там неоднократно встречается шаблон из последовательности вызовов:
W>// получение бакета по фьютексу:
W>hb = hash_futex(&key);

W>// обход всех записей в бакете:
W>plist_for_each_entry_safe(this, next, &hb->chain, list)

W>// проверка на коллизии
W>if (match_futex (&this->key, &key)) 
W>

W>Везде результаты plist_for_each_entry* отфильтровываются через match_futex.



Здравствуйте, watchmaker, Вы писали:

// проверка на коллизии
if (match_futex (&this->key, &key))

Вы не внимательно читаете заданный вопрос — это не проверка на коллизии, а вполне конкретный код для нахождения заданного бакета, чтобы, например пробудить его !
Re[5]: C++11: Синхронизация - Условные переменные и ложные п
Здравствуйте, watchmaker, Вы писали:

// проверка на коллизии
if (match_futex (&this->key, &key))

Вы не внимательно читаете заданный вопрос — это не проверка на коллизии, а вполне конкретный код для нахождения заданного бакета, чтобы, например пробудить его !