|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Slava Astashonok 2:5020/400 15 Mar 2003 18:12:13 To : All Subject : списки, деревья и multithreading -------------------------------------------------------------------------------- Может кто-нибудь поделиться опытом борьбы с динамическими списками и деревьями в многопотоковых программах, в которых несколько нитей могут одновременно добавлять/удалять данные? Какие именно проблемы при этом возникают я поясню на примере: предположим, наши данные представлены двусвязным списком и некоторая нить удаляет элемент n, связанный с n-1 и n+1. В первую очередь эта нить должна блокировать элемент n, а так как она будет модифицировать указатели в элементах n-1 и n+1, то ей еще нужно будет блокировать и эти элеметы. Предположим, что в этот момент другой нити вздумалось удалять элемент n-1: она заблокировала его, n-2 и остановилась при попытке блокировки n (он уже заблокирован). Первая нить продолжает работу и останавливается при попытке блокировки n-1. Получили deadlock. Сейчас я использую способ, заключающийся в хранении данных в нескольких независимых списках, и блокирую любой из них по мере необходимости, однако я этим неудовлетворен. Тем более, что в дальнейшем списки я хочу заменить сбалансированным деревом. Hаклевывается еще один способ, но я с ним пока подожду. -- If it happens once, it's a bug. If it happens twice, it's a feature. If it happens more than twice, it's a design philosophy. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/2470252da39b4.html, оценка из 5, голосов 10
|