Понимание безопасности потоков - PullRequest
1 голос
/ 28 апреля 2019

Позвольте использовать в качестве примера стандартное дерево двоичного поиска, его узлы имеют инкапсулированное значение и указатели на левого и правого потомков и его родителя. Его основными методами являются addNode(), removeNode() и searchNode().

Я хочу понять, как сделать мою структуру данных безопасной. Я, однако, не очень разбираюсь в безопасности потоков и хочу спросить, верно ли то, что я думаю, или нет.

Моя первая проблема - это решение: что я хочу сделать, когда у меня есть параллельные методы? Допустим, я использую свой BST для управления картой в игре: позиция персонажа игрока представлена ​​массивом double s, я сохраняю позиции игрока в моем BST в лексикографическом порядке. Один игрок уничтожил цель (и его поток хочет удалить ее с моей карты), но другой игрок начинает атаку и ему нужен список всех возможных целей на определенном расстоянии от него, включая только что удаленную цель (и его поток хочет выполнить поиск, который будет включать в себя цель). Как мне справиться с ситуацией? А как насчет других ситуаций?

Моя вторая проблема, (я думаю) моя самая большая, связана с приведением в действие: как я могу добиться того, чего хочу. Я читал о таких вещах, как атомарные операции, линейность, без препятствий, без блокировок, без ожидания. Я никогда не обнаруживал в одном месте простого определения для каждого, преимуществ этой стратегии, недостатков. Что это за вещи? Что я делаю, если я блокирую узлы, или если я блокирую указатели на другие узлы, или значения инкапсулируются в узле?

Правильно ли я понимаю проблему безопасности потоков? У вас есть предложения по проблемам, о которых мне следует подумать, или по письменным документам и документам в формате pdf, которые я должен прочитать, чтобы лучше понять проблемы и их многочисленные решения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...