По-моему, уже. По моему опыту и по другим многочисленным сообщениям происходящее очень похоже на работу над белыми списками. В нескольких федеральных округах ежедневно достаточно долго недоступны сайты cf, а когда доступны, тогда ютуб начинает работать. Можно считать, что новое дно достигнуто.
Впервые сталкиваюсь с тем, что РКН заблокировал примерно половину всех посещаемых сайтов! Даже на leetcode (Cloudflare) не попасть во время публикации комментария! Заблокированы, похоже все, сайты на Cloudflare, есть заблокированные на OVH. Провайдер РТ. К некоторым получалось подключиться со стоковым gdpi, поэтому можно считать, что виновник известен.
многие современные пользователи vi переназначают почти неиспользуемую клавишу Caps Lock для смены режимов редактора. Это ускоряет работу и делает её удобнее, особенно учитывая частое использование клавиши Escape.
Намного удобнее использовать альтернативу LCtrl+[ или для одинарного действия LСtrl+o.
Видимо, потому что класс TextureDX12 до виртуальности был оберткой над умным указателем. Хотя код не выглядит безопасным, потому что shared_ptr - не pod. И дизайн такой, что после случайного повторного вызова init память потечет. Если естественное начальное состояние nullptr, можно было в класс добавить инициализацию.
Код выглядит так из-за санитайзера. Компилятор с включенной опцией -fsanitize=undefined добавляет в исходный код нужные ему проверки. По теме есть лекция от разработчика asan https://www.lektorium.tv/lecture/23702
Казалось смешным, пока не вспомнил, что храню остатки урожая чеснока в масле в банке в холодильнике с температурой около 4 градусов. В тепле не оставлял, и чеснок полностью раздавлен. Использую только для жарки, и только сейчас дошло, что варианты с заправкой отпадают. А ведь это очень распространенный рецепт.
Хабр упорно не давал отправить личное сообщение, поэтому пишу сюда возможные неточности:
Например, мы хотим первой картой получить десятку треф, вероятность этого события в случайно собранной колоде будет 1/36, но шанс получить этой же карты на втором эксперименте будет уже 1/35.
Если нужно вытащить ровно на втором ходу, то вероятность события - это произведение вероятностей: <не вытащить на первом> * <вытащить на втором> = 35/36 * 1/35 = 1/36.
Шанс получить десятку треф на втором ходе будет (1/36 + 1/35).
Это предложение по смыслу повторяет предыдущее. Но если нужно вытащить за два хода, то вероятность равна: <вытащить на первом> + <вытащить ровно на втором (выше)> = 2/36. Это же проверяется другой формулой: <вытащить за два хода> = 1 - <не вытащить за два хода> = 1 - <не вытащить на первом> * <не вытащить на втором> = 1 - 35/36 * 34/35 = 1 - 34/36 = 2/36
У Shell sort опечатка в асимптотиках - квадрат относится только к логарифму. Ещё википедия говорит, что сортировка имеет O(nlogn) или O(nlog^2(n)) в лучшем случае (в зависимости от выбора шага) и до O(n^2) в худшем, https://en.wikipedia.org/wiki/Shellsort.
upd: Спасибо @LeetCode_Monkey и @qw1 за то, что отметили ошибку в моем комментарии. Не обратил внимание, что в третьем примере гонка, а значит ub, возникает уже при вставке первого элемента в main. То есть недостаточно делать reserve и использовать индексы. Из головы вылетело простое правило, что std::vector не является потокобезопасным, поэтому изменение vector в нескольких потоках без синхронизации - ub.
В третьем примере vector следует полностью строить в main, т.к. функция в конечном итоге ждет завершения всех потоков.
#include <thread>
#include <vector>
using namespace std;
void func() {
for (int i = 0; i < 100; ++i);
}
int main()
{
const int nworkers = 5;
vector<thread> threads;
threads.reserve(nworkers + 1);
threads.emplace_back([&threads, nworkers]{
for (int i = 0; i < nworkers; ++i)
threads.emplace_back(func);
});
for (int i = 0; i < nworkers + 1; ++i)
threads[i].join();
return 0;
}
Можно. threads[0] добавляется в main. Основной поток с main остановится на первом join(), пока не завершится threads[0], к завершению которого вектор будет построен.
В первом примере дважды допускается одна и та же ошибка - возврат ссылки на локальную переменную функции. Упрощенно https://godbolt.org/z/Ybcn3n1va. Сначала параметр v конструктора возвращаемого объекта ссылается на локальную переменную arg функции arg. Затем поле value ссылается на локальную переменную v конструктора named_arg.
В третьем примере можно было использовать vector::reserve(), чтобы гарантировать отсутствие реалокаций, и индексы вместо итераторов для корректного определения начала и конца вектора.
По-моему, уже. По моему опыту и по другим многочисленным сообщениям происходящее очень похоже на работу над белыми списками. В нескольких федеральных округах ежедневно достаточно долго недоступны сайты cf, а когда доступны, тогда ютуб начинает работать. Можно считать, что новое дно достигнуто.
Не называл https://knowyourmeme.com/memes/anime-was-a-mistake
Впервые сталкиваюсь с тем, что РКН заблокировал примерно половину всех посещаемых сайтов! Даже на leetcode (Cloudflare) не попасть во время публикации комментария! Заблокированы, похоже все, сайты на Cloudflare, есть заблокированные на OVH. Провайдер РТ. К некоторым получалось подключиться со стоковым gdpi, поэтому можно считать, что виновник известен.
Намного удобнее использовать альтернативу LCtrl+[ или для одинарного действия LСtrl+o.
Видимо, потому что класс TextureDX12 до виртуальности был оберткой над умным указателем. Хотя код не выглядит безопасным, потому что shared_ptr - не pod. И дизайн такой, что после случайного повторного вызова init память потечет. Если естественное начальное состояние nullptr, можно было в класс добавить инициализацию.
Что такое органичные? Например?
Код выглядит так из-за санитайзера. Компилятор с включенной опцией -fsanitize=undefined добавляет в исходный код нужные ему проверки. По теме есть лекция от разработчика asan https://www.lektorium.tv/lecture/23702
Казалось смешным, пока не вспомнил, что храню остатки урожая чеснока в масле в банке в холодильнике с температурой около 4 градусов. В тепле не оставлял, и чеснок полностью раздавлен. Использую только для жарки, и только сейчас дошло, что варианты с заправкой отпадают. А ведь это очень распространенный рецепт.
У вас операции в map за логарифм, поэтому O(nlogn).
Хабр упорно не давал отправить личное сообщение, поэтому пишу сюда возможные неточности:
У Shell sort опечатка в асимптотиках - квадрат относится только к логарифму. Ещё википедия говорит, что сортировка имеет O(nlogn) или O(nlog^2(n)) в лучшем случае (в зависимости от выбора шага) и до O(n^2) в худшем, https://en.wikipedia.org/wiki/Shellsort.
Можно только предполагать, что произойдет, потому что race condition - ub. Ответил ниже https://habr.com/ru/articles/787776/comments/#comment_26417306.
Я имел в виду синхронизацию с join, но ошибка раньше - ответил ниже https://habr.com/ru/articles/787776/comments/#comment_26417306.
upd: Спасибо @LeetCode_Monkey и @qw1 за то, что отметили ошибку в моем комментарии. Не обратил внимание, что в третьем примере гонка, а значит ub, возникает уже при вставке первого элемента в main. То есть недостаточно делать reserve и использовать индексы. Из головы вылетело простое правило, что std::vector не является потокобезопасным, поэтому изменение vector в нескольких потоках без синхронизации - ub.
В третьем примере vector следует полностью строить в main, т.к. функция в конечном итоге ждет завершения всех потоков.
С memory_order здесь нет ребусов. По умолчанию это
memory_order_seq_cst.
Пример кода https://godbolt.org/z/q7xj4x1zo,
Можно. threads[0] добавляется в main. Основной поток с main остановится на первом join(), пока не завершится threads[0], к завершению которого вектор будет построен.
pitch d... - pitch deck
В первом примере дважды допускается одна и та же ошибка - возврат ссылки на локальную переменную функции. Упрощенно https://godbolt.org/z/Ybcn3n1va. Сначала параметр v конструктора возвращаемого объекта ссылается на локальную переменную arg функции arg. Затем поле value ссылается на локальную переменную v конструктора named_arg.
В третьем примере можно было использовать vector::reserve(), чтобы гарантировать отсутствие реалокаций, и индексы вместо итераторов для корректного определения начала и конца вектора.
Такое легаси, https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rl-name-type
Движок 2d или 3d?