The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Facebook открыл RacerD, статический анализатор для многопото..., opennews (??), 21-Окт-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


17. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (-), 21-Окт-17, 20:16 
> ситуации, когда выполняется два одновременных обращения к переменной члена класса, не отделённой при помощи мьютекса, если в одном из обращений выполняется операция записи

В модели памяти это называется Data Race. И необязательно необходим мьютекс. Так вот, Data Race != Race Condition. Эти проблемы могут быть в наличии как одновременно, так и каждая по-отдельности.

Ответить | Правка | Наверх | Cообщить модератору

27. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от pavlinux (ok), 22-Окт-17, 03:21 
> В модели памяти это называется Data Race. И необязательно необходим мьютекс.
> Так вот, Data Race != Race Condition.

Хвать гнать, Race Condition - это общее описание всех багов возникающих при доступе к чему-либо, двух и более кого-либо.

Есть такие баги "Time of check to time of use (TOCTOU)", тож разновидность race condition.

Ответить | Правка | Наверх | Cообщить модератору

28. "Facebook открыл RacerD, статический анализатор для многопото..."  –2 +/
Сообщение от Аноним (-), 22-Окт-17, 13:01 
не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490
Ответить | Правка | Наверх | Cообщить модератору

33. "Facebook открыл RacerD, статический анализатор для многопото..."  +1 +/
Сообщение от pavlinux (ok), 22-Окт-17, 20:41 
> не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490

Еще раз:  "Race Condition - это общее описание всех багов возникающих при доступе к чему-либо, двух и более кого-либо."
У вас в примере классический race cond."multiple threads can concurrently try to update an account balance".
В решении корявое решение в стиле Winows (с надеждой на компилятор). Отбалды делать атомарные операции
над не атомарными перемененными ну совсем не гарантирует атомарность. Linux так вообще этого не позволит.

Ответить | Правка | Наверх | Cообщить модератору

45. "Facebook открыл RacerD, статический анализатор для многопото..."  +1 +/
Сообщение от Кузнец (?), 23-Окт-17, 15:53 
>> не гуглятся примеры dr vs rc? я помогу https://blog.regehr.org/archives/490
> Еще раз:  "Race Condition - это общее описание всех багов возникающих
> при доступе к чему-либо, двух и более кого-либо."
> У вас в примере классический race cond."multiple threads can concurrently try to
> update an account balance".
> В решении корявое решение в стиле Winows (с надеждой на компилятор). Отбалды
> делать атомарные операции
> над не атомарными перемененными ну совсем не гарантирует атомарность. Linux так вообще
> этого не позволит.

По-моему, вы немного не о том. Гонка возникает, когда есть... гонка. Т.е. непредсказуемая последовательность "приходящих к финишу" чего-то там. Вы же говорите о ложном суждении о естественной атомарности инвариантов. А атомарность инвариантов нужно описывать разрабу и описывать осмысленно. Компилятор этого не сделает.
В общем, и в литературе эту ситуацию почему-то запихивают в "гонку". Хотя тут никакой гонки нет.

Ответить | Правка | Наверх | Cообщить модератору

50. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (-), 23-Окт-17, 20:48 
Во-первых, в статье нет решений, есть только примеры, показывающие разницу между rc и dr.
Во-вторых, приведены они в псевдокоде. "Атомарная операция" определяется нестрого, это не конструкция языка, и атомарные переменные тут не при чем. Важно лишь, что результат в блоке одновременно видим или невидим всем потокам. Реализовать можно через системный мьютекс, Linux позволит, я гарантирую.
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

35. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от pavlinux (ok), 22-Окт-17, 20:53 
......Пля, модыр, трахни в моск свой кревой парсер
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

40. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец (?), 23-Окт-17, 15:29 
Это всё гонка. Т.е. когда состояние обобществлённого ресурса зависит от (псевдо)случайных факторов, а не прописано логикой алгоритма.
Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

48. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Аноним (-), 23-Окт-17, 20:22 
Race condition обязательно нарушает логику алгоритма (семантику, инварианты, или как хотите) при неблагопрятном стечении обстоятельств. Data race - совсем не обязательно.
Ответить | Правка | Наверх | Cообщить модератору

51. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец (?), 24-Окт-17, 01:19 
Агх. Не уверен. Гонка возникает, чаще всего, из-за неверного суждения разраба о том, что вот как поток кода следует в его описании, так он и будет исполнятся. Более того, будет исполнятся "континуумно", т.е. без gaps-ов между строками выражений. Но проблема в том, что Ява, и не только она, в этом плане совершенно обманчива -- код на стадии исполнения перемешивается непредсказуемым образом (как оптимизатор решит), если только явно не предписать его прецеденцию. А уж многопоточность усложняет картину ещё больше.
DR же возникает из-за другого заблуждения -- что компилятор каким-то немыслимым образом определить желаемые границы атомарного инварианта просто просмотрев члены экземпляры (класса). Но это тоже невозможно. Т.е. DR это и не гонка совсем, по-моему.
Ответить | Правка | Наверх | Cообщить модератору

52. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец (?), 24-Окт-17, 01:24 
> Race condition обязательно нарушает логику алгоритма (семантику, инварианты, или как хотите)
> при неблагопрятном стечении обстоятельств. Data race - совсем не обязательно.

RC как раз ничего не нарушает -- нельзя нарушить то, что не предписано. Просто нужно зарубить себе на носу, что прецеденция исходного кода не будет сохранена на стадии исполнения. Если компилятору не сообщить как именно это сделать. Иначе -- будет как попало. Ява не сохраняет прецеденцию исходного кода (это так, для тех, кто не в курсе) по умолчанию.

Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

60. "Facebook открыл RacerD, статический анализатор для многопото..."  +/
Сообщение от Кузнец (?), 24-Окт-17, 21:27 
> Это всё гонка. Т.е. когда состояние обобществлённого ресурса зависит от (псевдо)случайных
> факторов, а не прописано логикой алгоритма.

... Итак, резюмирую. Гонка всегда результат неверного суждения об исполнительной среде. А не порок языка. По крайней мере, в Яве.

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру