0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 1
|
||||||
1 | ||||||
Ранний сброс hazard pointer04.12.2016, 09:07. Показов 1978. Ответов 2
Метки нет (Все метки)
Вопрос к господам интересующимся lock-free структурами данных. Разбирал методику hazard pointer у Williams-а в его C++ Concurrency in Action, завис на одном моменте, который мне никак не удаётся осознать. Причём автор метода hazard указателей Maged M. Michael в документе "P0233R0" по этой теме делает принципиально так же. Т.е. ошибки в книге быть не может, я даже errata к книге Williams-а проверил, чисто. Всё это говорит о том, что я что-то не понимаю, мне нужна помощь знатоков, т.е. Вас. Итак, вот ссылка на код из книги.
Вот проблемный кусочек:
Вопрос: прав ли я в том, что это может привести в undefined behavior, и если нет (это безопасно), то почему? Дополнительно: по коду видно, что и ДО обнуления hazard есть проверка на NULL old_head, и ПОСЛЕ, что как бы говорит "да, после old_head может быть изменён", но... всё равно его спокойно разыменовывают.
0
|
04.12.2016, 09:07 | |
Ответы с готовыми решениями:
2
Shared_ptr - stored pointer, owned pointer Mac OS X Snow Leopard 10.6.6 Hazard В Сети появился ранний релиз Windows 8 Ранний вывод исхода условия до ввода данных |
700 / 106 / 20
Регистрация: 22.06.2014
Сообщений: 236
|
|
04.12.2016, 11:24 | 2 |
Trilobit, далее по тексту этой книги написано следующее: "Заявив свои права на владение указателем, а это означает, что никто другой не имеет права удалять объект, нужно проверить не ссылается ли на этот объект указатели опасности других потоков
if(outstanding_hazard_pointers_for(old_head)) ". Ну и если удалять пока нельзя, то поставить в очередь ожидания на удаление reclaim_later(old_head); , т.к. естественно удалять, пока ссылаются на объект указатели опасности из других потоков, нельзя, а если таких ссылок на этот объект нет, то он просто удаляется стандартным способом delete old_head; и больше о нём никто ничего не знает. То есть тут вопрос о владении объектом. Никто ничего удалить не может пока единственным последним владельцем не останется тот поток, для которого outstanding_hazard_pointers_for(old_head) == false . И вот в нём уже происходит реальное физическое удаление оператором delete.
2
|
Ушел с форума
|
||||||
04.12.2016, 11:32 | 3 | |||||
В данном коде, - насколько я понимаю, мы говорим про "Listing 7.6 An implementation of
pop() using hazard pointers", - hazard pointer сбрасывается строго после того, как node уже удалена из списка. То есть, другие потоки при выходе из блоков do/while видят уже другое значение old_head. Мои комментарии к данному коду:
2
|
04.12.2016, 11:32 | |
04.12.2016, 11:32 | |
Помогаю со студенческими работами здесь
3
Переписать структуру со стандарта c++11 под более ранний Ошибка при компиляции: cannot use uintptr(unsafe.Pointer(sslPara) (type uintptr) as type syscall.Pointer in field value Найти самый ранний год выпуска трека через API Discogs Определить по дате, сегодняшний это день, вчерашний или более ранний Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции.
/ / . . .
|
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование
Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
|
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы
В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
|
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире
В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
|
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации
В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
|
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии
В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
|
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации
В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
|
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику
Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
|
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику
В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
|
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера
Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
|
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды
В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
|
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике
В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
|