Viacheslav
Многие на его misaligned reads погорели при портировании кода.
Arseny
Andy
/help@FailsBot
Berkus
Andy
Привет всем, есть вопрос, студия 2017, С++, при создании нового проекта из существующего исходного кода студия зависает, снимать надо из менеджера задач, проект в итоге пустой, с тем же шарпом например такой проблемы нет, удаление-добавление с++ в установщике помогает не на долго
Matwey
Andy
хотите сказать что это стандартная фича студии ? 😁😁
Berkus
🐙 Antony
🐙 Antony
В начале acquire, потому что consume не рекомендуется с C++17
В конце seq_cst, потому что это не частый кейс и не стоит там преждевеременно оптимизировать
Arseny
🐙 Antony
Release будет не достаточно для какой-нить DEC Alpha
🐙 Antony
ой, стоп
🐙 Antony
Пара aquire release - норм
🐙 Antony
** я прочитал release как relaxed
Danil
Подскажите пожалуйста, STL по какой книге лучше начать учить?
RattenKong 🦧🐀🦍️
Vlad
Подскажите пожалуйста как в VS можно шрифт поменять в редакторе
Vlad
Не могу найти в параметрах
Viacheslav
Пара aquire release - норм
Спасибо большое. А можно объяснить, зачем здесь acquire и release? От какого потенциального memory reorder они в этом случае защитят?
Arseny
Без них можно прочитать указатель до того, как данные, которые по нему можно получить инициализированы
Danil
Мне бы хотелось сначала общее представление о библиотеке получить)
Danil
Учить библиотеки без практических заданий грустно и немного бесполезно. Лучше курс найти, если вдруг бывают хорошие
Arseny
Тогда cppreference полистать
Viacheslav
Какой указатель тут возможно прочитать до инициализации?
Arseny
Можно получить результат do_stuff, но ещё не увидеть всех изменений, которые в do_stuff сделаны
Viacheslav
do_stuff внутри синхронизирован, пока мьютекс не разблокируется, он ничего не вернёт.
То есть happens before для факта наличия invalid_marker внутри atomic_pointer гарантируется тем, что объект надо сначала создать. А в do_stuff мьютекс выступает барьером памяти.
Viacheslav
Я думал, что мне в этом случае достаточно атомарности чтения и записи в сам atomic_pointer, но теперь уже не уверен 😂
Vsevolod
у нас это в хедж фонде на собеседовании у всех спрашивают, про эту максимальную подпоследовательность
Arseny
Vsevolod
есть линейное
Arseny
Подстроки или подпоследовательности?
Arseny
В смысле выбранные элементы последовательности должны подряд идти или нет?
Vsevolod
ну да, а иначе это k-max, который делается через quick select (тоже за линейное время)
Arseny
Vsevolod
да
Vsevolod
недавно на хабре читал про оконный алгоритм для этой задачи
Arseny
Viacheslav
Arseny
Нет, не безопасна, если другой поток прочитает этот pointer без барьеров
Viacheslav
pthread_mutex_unlock — это барьер памяти ведь. Где именно тут чтение без барьера?
Arseny
А где барьер в читающем потоке?
Arseny
Значение pointer будет правильное. А вот *pointer может оказаться ерундой при чтении
Anonymous
Посоветуйте литературу по крестам.
Oleg
Лол
Anatoly
@Champaque поищи по тегу #book #books
Anonymous
Viacheslav
Я сейчас только про do_stuff говорю, отдельно от atomic_pointer.
Andrey
Здравствуйте. Подскажите пожалуйста, каким api на c++ под linux-ом устанавливается ip адрес, маска, и шлюз. Может есть какая-нибудь библиотека для чтения и редактирования файла /etc/network/interface. В котором собственно и можно поменять ip и т.д.
Viacheslav
А что do_stuff? do_stuff вернёт инициализированные данные. И тот поток, который вызвал do_stuff их даже сразу правильно увидит.
А теперь сверху лепим тупой кэш.
Если видим invalid_marker, который там гарантированно будет при создании объекта, то всегда идём в do_stuff, другого способа получить указатель на объект нет.
do_stuff возвращает указатель на что-то, что было полностью инициализировано, так как мьютекс внутри обеспечивает все необходимые барьеры.
Далее кладём это в atomic_pointer. Из-за гарантий do_stuff я физически ведь не могу записать туда что-то наполовину инициализированное.
Единственное, что вполне может случиться, так это что какой-то поток получит ещё раз invalid_marker, но это нормально, потому что он придёт опять в do_stuff и вытащит тот же самый адрес.
Viacheslav
Я изначально и написал acquire / release, но мне кажется, что это лишнее в этом случае, из-за барьеров в do_stuff.
Arseny
Оно инициализированно, но другой поток, который do_stuff не вызывал, а просто прочитал указатель может этого ещё не видеть. Например, у него может быть закешировано старое значение *pointer и никто ему не помешает его использовать.
Viacheslav
*pointer никогда не меняется, объект do_stuff создаёт всего один раз.
Viacheslav
Для заданных входных параметров, само собой.
Arseny
Он сохранить старое значение по адресу pointer
Berkus
Andrey
🐙 Antony
Почему нет?
Arseny
Да, почему нет?
Berkus
пушо у вас такого кэша нет
Viacheslav
В основном потому, что его нет, мы не в С++11 мире живём.
🐙 Antony
*pointer никогда не меняется, объект do_stuff создаёт всего один раз.
lock/unlock внутри do_stuff обладают acquire/release семантикой и синхронизируют видимость только между потоками, которые так же зовут acquire/release.
Другимим словами, если вам надо чтобы do_stuff синхронизировал между всем потоками, которые не зовут acquire/release, вам надо вставить seq_cst барьер куда-то после его вызова, но до задания нового значения атомарной переменной
Но я на 100% не уверен
Arseny
Square
чот вы меня запутали...
пойду еще раз деревенца посмотрю...
🐙 Antony
FailsBot
/help@FailsBot
USAGE:
/help - prints this message;
/vzhuh [message] - do vzhuh;
/start - info about bot.
Square
https://youtu.be/_-3syPxgwqs?t=309
Vlad
Есть кто нибудь на MAC’E,где в xcode находятся файлы которые я создал с помощью fstream?
Berkus
Berkus
где-то в дебрях deriveddata наверное