Как избежать тупиков?

У меня была такая же проблема и она была решена, возможно, не лучшим образом, но она работает. Я заменил все разрывы строк до того, как достиг своего реального соответствия:

mystring= Regex.Replace(mystring, "\r\n", "")

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

Я попробовал все вышеперечисленные предложения без везения, я использую .Net 3.5 FYI

30
задан Stefano Borini 17 November 2009 в 16:24
поделиться

6 ответов

Вы можете избежать критических разделов, используя вместо них передачу сообщений (синхронные и асинхронные вызовы). При использовании синхронных вызовов вы все равно должны убедиться, что не выполняете циклический вызов, в котором поток A задает потоку B вопрос, а B должен задать A вопрос, чтобы иметь возможность ответить.

Другой вариант - сделать асинхронные вызовы вместо этого. Однако получить возвращаемые значения труднее.

Примечание : Действительно, система передачи сообщений реализована с использованием критической секции, которая блокирует очередь вызовов, но она абстрагируется.

1
ответ дан 28 November 2019 в 00:27
поделиться

Когда я работаю на C ++, у меня работает следующее:

  1. все общедоступные методы (за исключением ctor и dtor) блокировки поточно-безопасного класса

  2. частные методы не могут вызывать общедоступные методы

] Это не общий метод предотвращения тупиковых ситуаций.

2
ответ дан 28 November 2019 в 00:27
поделиться

Один из способов - использовать иерархию критических секций . Если вы гарантируете, что родительский критический раздел никогда не входит в один из его дочерних элементов, взаимоблокировки не произойдет. Трудность состоит в том, чтобы обеспечить соблюдение этой иерархии.

10
ответ дан 28 November 2019 в 00:27
поделиться

Список Связанные справа на этой странице содержит несколько ссылок, которые предоставляют интересную информацию по теме.

В дополнение к этому списку существует много других Вопросы SO, обсуждающие эту тему, такие как

... и многие другие

5
ответ дан 28 November 2019 в 00:27
поделиться

Среди различных методов входа в критические секции - семафоры и мьютексы являются наиболее популярными.

  • Семафор - это механизм ожидания, а мьютекс - это механизм блокировки, что ж, концепция сбивает с толку. чаще всего, но короче говоря, поток, активирующий мьютекс, может только деактивировать его. имея это в виду ...

  • Не позволяйте никакому процессу блокировать частичное отсутствие ресурсов, если процессу нужно 5 ресурсов, подождите, пока все они станут доступны.

  • Если вы используете здесь семафор, вы можете разблокировать / разблокировать ресурс, занятый другим потоком. под этим я подразумеваю, что упреждение является другой причиной.

Эти 2, по моему мнению, являются основными условиями, остальные 2 из 4 общих мер предосторожности могут быть связаны с ними.

Если не согласен, ps добавьте комментарии. Я уже опоздал, позже добавлю более ясное и ясное объяснение.

1
ответ дан 28 November 2019 в 00:27
поделиться

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

1
ответ дан 28 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: