На собеседованиях часто спрашивают что такое deadlock. Затем может следовать вопрос а как его можно устранить, при этом желательно привести несколько примеров устранения различными способами.
На практике это обычно решается изменением архитектуры. Как можно устранить проблему либо при использовании дополнительных алгоритмов, либо особенностей языка, библиотек, операционной системы.
Здравствуйте, abc1234573, Вы писали:
A>На собеседованиях часто спрашивают что такое deadlock. Затем может следовать вопрос а как его можно устранить, при этом желательно привести несколько примеров устранения различными способами. A>На практике это обычно решается изменением архитектуры. Как можно устранить проблему либо при использовании дополнительных алгоритмов, либо особенностей языка, библиотек, операционной системы.
1. Упорядочиваем доступ к ресурсам.
2. При запросе лока не ресурс, указываем время ожидания и корректно обрабатываем таймауты.
3. Используем неблокирующие структуры данных.
Здравствуйте, avpavlov, Вы писали:
L>>3. Используем неблокирующие структуры данных.
A>Данные пассивны, они не могут быть блокирующими или нет, наверное имелись ввиду алгоритмы?
Здравствуйте, avpavlov, Вы писали:
L>>Я писал не про данные, а про структуры данных.
A>Оп-па, наверное тут какой-то нюанс, который всё меняет. Просвятишь?
Нет, не просвящу. Гугли либо по "неблокирующие структуры данных" (если хочешь на русском), либо по "lock-free data structures" (если хочешь много).
L>Нет, не просвящу. Гугли либо по "неблокирующие структуры данных" (если хочешь на русском), либо по "lock-free data structures" (если хочешь много).
Погуглил, и таки-да, появилось ощущение, что много кто взаимозаменяет понятия "неблокирующий алгоритм" и "неблокирующая структура данных", что лично мне представляется грустным.
Приведи мне пример "неблокирующей структуры данных" и посмотрим вместе, является она неблокирующей сама по себе или только при использовании неблокирующего алгоритма.
Здравствуйте, avpavlov, Вы писали:
A>Погуглил, и таки-да, появилось ощущение, что много кто взаимозаменяет понятия "неблокирующий алгоритм" и "неблокирующая структура данных", что лично мне представляется грустным.
A>Приведи мне пример "неблокирующей структуры данных" и посмотрим вместе, является она неблокирующей сама по себе или только при использовании неблокирующего алгоритма.
Здравствуйте, avpavlov, Вы писали:
A>Погуглил, и таки-да, появилось ощущение, что много кто взаимозаменяет понятия "неблокирующий алгоритм" и "неблокирующая структура данных", что лично мне представляется грустным.
Если с википедии то:
Структура данных — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. Структура данных часто является реализацией какого-либо абстрактного типа данных.
Не будет алгоритма обхода дерева без дерева. А если говорить о неблокирующих структурах — то и подавно, не может быть там какой-то абстракции, скорее пачка хитростей/соглашений, именно на уровне данных и алгоритма.
F> Не будет алгоритма обхода дерева без дерева. А если говорить о неблокирующих структурах — то и подавно, не может быть там какой-то абстракции, скорее пачка хитростей/соглашений, именно на уровне данных и алгоритма.
Но первичен в данном случае именно алгоритм, и структуру данных допиливают под него. Причём, если потом оставить только допиленную структуру и убрать алгоритм — разве структура останется "неблокирующей"?
F>> Не будет алгоритма обхода дерева без дерева. А если говорить о неблокирующих структурах — то и подавно, не может быть там какой-то абстракции, скорее пачка хитростей/соглашений, именно на уровне данных и алгоритма.
A>Но первичен в данном случае именно алгоритм, и структуру данных допиливают под него. Причём, если потом оставить только допиленную структуру и убрать алгоритм — разве структура останется "неблокирующей"?
У слова "структура данных" есть вполне определенный смысл, который тебе процитировали. Чего тут обсуждать?
L>А не высосаный из пальца, а реальный словарь (например, Dictionary из .Net) — это алгоритм или структура данных?
Я не понимаю, что ты пытаешься мне доказать? Что алгоритму нужна структура данных? Я с этим не спорю.
А вот ты похоже пытаешься оспорить, что структура без алгоритма ничего из себя не представляет.
Если взять Dictionary из .Net, выдернуть из него поля, где он хранит данные — останется это словарём? Нет, не останется. Получается словарь словарём делает алгоритм, а не структура данных.
L>>А не высосаный из пальца, а реальный словарь (например, Dictionary из .Net) — это алгоритм или структура данных?
A>Я не понимаю, что ты пытаешься мне доказать? Что алгоритму нужна структура данных? Я с этим не спорю.
Но тем не менее это не так. Алгоритму структура данных не нужна.
A>А вот ты похоже пытаешься оспорить, что структура без алгоритма ничего из себя не представляет.
Я не знаю, что такое "структура". Речь все еще о "структуре данных"?
A>Если взять Dictionary из .Net, выдернуть из него поля, где он хранит данные — останется это словарём? Нет, не останется.
Если взять Dictionary из .Net, выдернуть из него поля, то это не будет словарь из .Net.
Если не сложно, ответь на вопрос как он был изначально задан.
A>Получается словарь словарём делает алгоритм, а не структура данных.
Ага. А если из тебя все внутренности вырезать, то через пару минут ты не останешься. Выходит ты — это селезенка.
In computer science, a data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently.
Different kinds of data structures are suited to different kinds of applications, and some are highly specialized to specific tasks. For example, B-trees are particularly well-suited for implementation of databases, while compiler implementations usually use hash tables to look up identifiers.
Data structures are used in almost every program or software system. Data structures provide a means to manage huge amounts of data efficiently, such as large databases and internet indexing services. Usually, efficient data structures are a key to designing efficient algorithms. Some formal design methods and programming languages emphasize data structures, rather than algorithms, as the key organizing factor in software design.
Никакого упоминания "набора функций". Более того, во втором выделении стуктуры и алгоритмы отделены друг от друга
L>Я не знаю, что такое "структура". Речь все еще о "структуре данных"?
Да
L>Если не сложно, ответь на вопрос как он был изначально задан.
Словарь — это алгоритм. Я отвечал уже на этот вопрос. Ты собираешься меня переспросить про каждую известную тебе имплементацию словаря?
L>Ага. А если из тебя все внутренности вырезать, то через пару минут ты не останешься. Выходит ты — это селезенка.
Это как раз твоя мысль. Если следовать моей мысли, то человека человеком делает не селезёнка и другие органы, а то, как они взаимодействуют друг с другом.
L>Если не сложно, ответь на вопрос как он был изначально задан.
Теперь моя очередь попросить тебя сделать то, что было запрошено изначально
Приведи мне пример "неблокирующей структуры данных" и посмотрим вместе, является она неблокирующей сама по себе или только при использовании неблокирующего алгоритма.
Здравствуйте, avpavlov, Вы писали:
A>Никакого упоминания "набора функций". Более того, во втором выделении стуктуры и алгоритмы отделены друг от друга
Ты похоже все еще не погуглил по предложенным словам? Последуй совету. Если останутся вопросы, можешь задать их тут или воспользоваться поиском по форуму, эта тема уже неоднократно поднималась.
Заниматься софистикой сегодня у меня как-то нет настроения. Удачи.