|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6.
я смог придумать только флаг empty, чтобы по нему смотреть - пустая это ячейка или нет а может можно как-то null воткнуть в позицию v[1]? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 06:20 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Поскольку age обычно не бывает отрицательным - то можно договориться что если он равен -1 то это считается как null. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 06:51 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Бывает что доп поле как раз технически красивее. Преждевременная оптимизация зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 07:49 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Преждевременная оптимизация ну это не она... Это проектирование архитектуры. Если её неправильно спроектировать, потом всё переделывать. меня больше интересует, а есть ли вообще иной способ и на сколько этот прекрасен? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 09:36 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик я смог придумать только флаг empty, чтобы по нему смотреть - пустая это ячейка или нет а может можно как-то null воткнуть в позицию v[1]? Попробуйте std::optional. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 09:58 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Если структуры большие, можно в векторе хранить std::unique_ptr<A> и вкорячивать nullptr. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:00 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Да. Я именно про архитектуру. Она начинается с вопроса: "зачем хранить дырки в списке". Но вы вправе не обсуждать. Ваше право. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:36 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу а это неприемлемо, т.к. вектор большой. Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:39 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp, потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу а это неприемлемо, т.к. вектор большой. Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема. Есть еще альтернативный подход. Называется вертикальные массивы. Просто создаёшь два вектора. Код: plaintext 1. 2.
данные хранятся физически не консолидировано. Но логически - они связны по индексу элемента. Эта структура будет экономнее чем вериант с struct A {..} ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp, потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу а это неприемлемо, т.к. вектор большой. Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:51 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, Да. Сам два вектора делал часто). И еще есть 1500 вариантов оптимизации скорости в угоду.... жертвы ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:52 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, >на место удалённых Странная фраз. Что ты назвал местом? Бери другой список без мест или с местами заранее. Сортированный или нет...... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 10:54 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик PetroNotC Sharp, потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу а это неприемлемо, т.к. вектор большой. Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема. Есть еще альтернативный подход. Называется вертикальные массивы. Просто создаёшь два вектора. Код: plaintext 1. 2.
данные хранятся физически не консолидировано. Но логически - они связны по индексу элемента. Эта структура будет экономнее чем вериант с struct A {..} Это, наверное, хорошо только в случае необходимости очень серьёзной и очень специфической оптимизации. Но до этого придётся отказаться от std::vector и переходить на Си. В остальных случаях ваш вариант ужасен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:05 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
да, кэш такое не одобрит ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:07 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp неужели вектор не оптимизирован для этого? Дай цифры! нету цифр. А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:08 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Тест на цифры делать пол часа. Иначе как ты докажешь что задание выполнено?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик да, кэш такое не одобрит Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp неужели вектор не оптимизирован для этого? Дай цифры! нету цифр. А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:12 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav, У вас два слово "очень" и одно слово "ужасно". Это не инженерно) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:14 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Преждевременная оптимизация без целей и цифр. ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик да, кэш такое не одобрит Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри". это вектор с дырками внутри, а не структура ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:17 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp бабушкин зайчик пропущено... нету цифр. А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно. не знаю. Вообще это что-то уже сродни листу... Там от балды ячейки в массив складываются, а не подряд. В любом случае, МНЕ не подходит смещение индексов влево. Они должны оставаться теми же. т.е. в ячейке 152 всегда должна быть та же самая структура с теми же самыми данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:19 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton пропущено... Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри". это вектор с дырками внутри, а не структура А какой длины будет твой вектор (в среднем) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:25 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, >МНЕ не подходит смещение индексов влево Сначала скорость мешала. Теперь направление))) Короче, прогер сам себе задачи ставит. Бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:27 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, проблема всегда была одна - смещение ячеек влево. Ну и скорость тут тоже участвует. mayton А какой длины будет твой вектор (в среднем) ? миллионы так ещё и мультипоточность нельзя ждать, пока он там раздуплится ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:35 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp бабушкин зайчик PetroNotC Sharp, потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу а это неприемлемо, т.к. вектор большой. Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема. Я тестил. Примерно при 10000 элементов и более удаление произвольного элемента из вектора работает медленнее чем удаление из std::map. Что собственно не удивительно, т.к. надо все последующие элементы сдвинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:36 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp, проблема всегда была одна - смещение ячеек влево. Ну и скорость тут тоже участвует. mayton А какой длины будет твой вектор (в среднем) ? миллионы так ещё и мультипоточность нельзя ждать, пока он там раздуплится А с полным копированием массива при переполнении как собрались бороться? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:37 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav А с полным копированием массива при переполнении как собрались бороться? по ночам функция (это всё в демоне) будет чекать определённый порог, по его достижении увеличивать вектор (щас навскидку придумал) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:43 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Миллионы в оперативке? Зачем? Скажите тогда миллиарды. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:55 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, >так ещё и мультипоточность =добавьте транзакционность. Вы забыли! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:58 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, не забыл. Но это оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 11:59 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp, не забыл. Но это оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:05 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
кстати, о транзакционности... а как будет действовать C++ в такой ситуации: v1, v2, v3 ф-я сначала меняет v1, потом v2, потом v3 допустим ф-ю вызвали одновременно в двух потоках допустим они полезут в одну ячейку памяти очевидно одна ф-я окажется на X ns раньше, перезапишет ячейку в памяти для v1, потом пойдёт перезаписывать для v2, v3 какой шанс, что ф-я2, в ожидании освобождения ячейки из v1, каким-то образом перезапишет v2 раньше, чем ф-я1? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:27 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp, проблема всегда была одна - смещение ячеек влево. Ну и скорость тут тоже участвует. mayton А какой длины будет твой вектор (в среднем) ? миллионы так ещё и мультипоточность нельзя ждать, пока он там раздуплится Я вот не пойму. В 1 посту тебя можно было градуировать как С++ junior. Дальше ты затащил сложную тему. Тему кешей. И что нам делать дальше? Ты хоть обозначь честно свой левел чтоб понять как разговаривать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:37 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, много теории, мало опыта (в C++, в остальном много) - так градуируй ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:42 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчиккакой шанс, что ф-я2, в ожидании освобождения ячейки из v1, каким-то образом перезапишет v2 раньше, чем ф-я1? 50 на 50. Именно поэтому не надо обращаться к глобальных объектам без синхронизации. Используй уже названный std::optional и не выпендривайся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:48 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик кстати, о транзакционности... а как будет действовать C++ в такой ситуации: v1, v2, v3 ф-я сначала меняет v1, потом v2, потом v3 допустим ф-ю вызвали одновременно в двух потоках допустим они полезут в одну ячейку памяти очевидно одна ф-я окажется на X ns раньше, перезапишет ячейку в памяти для v1, потом пойдёт перезаписывать для v2, v3 какой шанс, что ф-я2, в ожидании освобождения ячейки из v1, каким-то образом перезапишет v2 раньше, чем ф-я1? Обходится без блокирования. А лочить и ждать.. Много ума не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:53 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик petrav А с полным копированием массива при переполнении как собрались бороться? по ночам функция (это всё в демоне) будет чекать определённый порог, по его достижении увеличивать вектор (щас навскидку придумал) Это похоже на троллинг специалистов. Ты сразу выложи все техническое задание что ты придумал. Иначе мы тут будем ломать головы и ты, как-бы издеваясь подкидывать новые условия которые отменяют предыдущие архитектуры. По поводу атомарности. Бери моё первое предложение по age < 0 и используй. Для Intel архитектуры чтение DWORD чисел, выровненных по границе того-же DWORD должно быть атомарным. Булевое свойство и вертикальный массив - выкинь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:53 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, Да. Троллинг. Нечем заняться челу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:54 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton По поводу атомарности. Бери моё первое предложение по age < 0 и используй. Для Intel архитектуры чтение DWORD чисел, выровненных по границе того-же DWORD должно быть атомарным. Булевое свойство и вертикальный массив - выкинь. Чтение и запись, да будут атомарными, но в общем логика программы построенная на этой атомарности не будет потокобезопасной. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 12:58 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик кстати, о транзакционности... а как будет действовать C++ в такой ситуации: v1, v2, v3 ф-я сначала меняет v1, потом v2, потом v3 допустим ф-ю вызвали одновременно в двух потоках допустим они полезут в одну ячейку памяти очевидно одна ф-я окажется на X ns раньше, перезапишет ячейку в памяти для v1, потом пойдёт перезаписывать для v2, v3 какой шанс, что ф-я2, в ожидании освобождения ячейки из v1, каким-то образом перезапишет v2 раньше, чем ф-я1? Запись может произойти в любом порядке. Никаких ожиданий не будет, каждое ядро пишет в свой кэш и дальше работает. А в каком порядке дальше кэши ядер запишутся в память никто не скажет. Если тебе нужна транзакция, то обеспечивай ее явно. Читай про std::mutex ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:01 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav mayton По поводу атомарности. Бери моё первое предложение по age < 0 и используй. Для Intel архитектуры чтение DWORD чисел, выровненных по границе того-же DWORD должно быть атомарным. Булевое свойство и вертикальный массив - выкинь. Чтение и запись, да будут атомарными, но в общем логика программы построенная на этой атомарности не будет потокобезопасной. Это просто старт дискуссии. Пускай он расскажет что потоки делают. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:02 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик кстати, о транзакционности... а как будет действовать C++ в такой ситуации: v1, v2, v3 ф-я сначала меняет v1, потом v2, потом v3 допустим ф-ю вызвали одновременно в двух потоках допустим они полезут в одну ячейку памяти очевидно одна ф-я окажется на X ns раньше, перезапишет ячейку в памяти для v1, потом пойдёт перезаписывать для v2, v3 какой шанс, что ф-я2, в ожидании освобождения ячейки из v1, каким-то образом перезапишет v2 раньше, чем ф-я1? так, ладно, тогда как вам такое решение: потоки порождаются во время внешнего вызова, дёргают какую-то ф-ю (она может другие ф-и позвать) и исчезают тогда если сразу при возникновении вызова сделать mutex на весь поток - оптимальный вариант? только вот вектор с данными лежит отдельно... для удобства его можно принять за БД, к которой все подключаются. И лочить весь вектор не вариант, там только одна ячейка нужна для потока... А другой поток может в другую ячейку писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:09 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик так, ладно, тогда как вам такое решение: потоки порождаются во время внешнего вызова, дёргают какую-то ф-ю (она может другие ф-и позвать) и исчезают Тогда твоя прога 99% времени будет занята созданием потоков, т.к. это далеко не быстро происходит. бабушкин зайчик тогда если сразу при возникновении вызова сделать mutex на весь поток - оптимальный вариант? только вот вектор с данными лежит отдельно... для удобства его можно принять за БД, к которой все подключаются. И лочить весь вектор не вариант, там только одна ячейка нужна для потока... А другой поток может в другую ячейку писать. Ты бы определился для начала одна ячейка в транзакции меняется или больше. Это принципиальный момент, если одна тогда можно использовать std::atomic без мьютекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Тогда твоя прога 99% времени будет занята созданием потоков, т.к. это далеко не быстро происходит. пардон, неправильно выразился потоки то постоянные но вот приходит вызов и запускается ф-я, вот её можно залочить. Dima T Ты бы определился для начала одна ячейка в транзакции меняется или больше. Это принципиальный момент, если одна тогда можно использовать std::atomic без мьютекса. ну скажем в одном векторе одну ячейку но векторов может быть несколько ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:21 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Ты бы определился для начала одна ячейка в транзакции меняется или больше. Это принципиальный момент, если одна тогда можно использовать std::atomic без мьютекса. std::atomic поможет только в простейших алгоритмах. Типа инкрементации элементов вектора. Чуть сложнее и снова всё поплывёт в плане потокобезопасности. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:28 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Тогда твоя прога 99% времени будет занята созданием потоков, т.к. это далеко не быстро происходит. пардон, неправильно выразился потоки то постоянные но вот приходит вызов и запускается ф-я, вот её можно залочить. Ничего не понял. бабушкин зайчик Dima T Ты бы определился для начала одна ячейка в транзакции меняется или больше. Это принципиальный момент, если одна тогда можно использовать std::atomic без мьютекса. ну скажем в одном векторе одну ячейку но векторов может быть несколько Тогда std::atomic не подходит. Можешь сделать не один мьютекс, а вектор с мьютексами, т.е. по одному на каждый набор. Или можно чуть соптимизировать, по одному мьютексу на несколько наборов, например 32. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:31 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Если задача бъется на части - то можно сделать несколько массивов. По количеству тредов. Идеальный параллелизм. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:33 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Всю прелесть и разбросанность многопоточных граблей можно ощутить только наступив на них. Пусть делает как хочет, опыт придёт как "сын ошибок трудных". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:36 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Ничего не понял. ну вот приходит вызов с параметром 1 на него запускается ф-я эту ф-ю можно ведь залочить мьютексом? Как и всё что в ней запустится. Dima T Можешь сделать не один мьютекс, а вектор с мьютексами, т.е. по одному на каждый набор. Или можно чуть соптимизировать, по одному мьютексу на несколько наборов, например 32. я немного недопонял, что именно они залочат? И что будет с ячейкой в векторе (отдельно стоящем и НЕ залоченном), куда полезут 2 потока в одну ячейку? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:41 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Всю прелесть и разбросанность многопоточных граблей можно ощутить только наступив на них. Пусть делает как хочет, опыт придёт как "сын ошибок трудных". а можно не надо? Хотелось бы в теории прояснить всё, а не в продакшене. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:41 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчика можно не надо? "Надо, Федя, надо." Теория тут как собаке пятая нога. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Какой продакшен без ТЗ? Смешно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:49 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Код: plaintext 1. 2. 3. 4. 5. 6.
я смог придумать только флаг empty, чтобы по нему смотреть - пустая это ячейка или нет а может можно как-то null воткнуть в позицию v[1]? "пустая это ячейка или нет" - такая формулировка автором трактуется как именно - 1) ячейка может не существовать - тогда она какая? отсутствующая или пустая? 2) для проверки на пустоту ячейка должна существовать и свойство пустоты - признак ячейки или функция контейнера? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:55 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Ничего не понял. ну вот приходит вызов с параметром 1 на него запускается ф-я эту ф-ю можно ведь залочить мьютексом? Как и всё что в ней запустится. Лочится не код, а данные к которым он обращается. Например залочил ты функцию f1(), которая работает с ячейкой A, другие потоки не смогут f1() выполнить пока этот не доработает, но если есть f2() которая тоже работает с ячейкой A, то нет никакой пользы от блокировки f1() бабушкин зайчик Dima T Можешь сделать не один мьютекс, а вектор с мьютексами, т.е. по одному на каждый набор. Или можно чуть соптимизировать, по одному мьютексу на несколько наборов, например 32. я немного недопонял, что именно они залочат? И что будет с ячейкой в векторе (отдельно стоящем и НЕ залоченном), куда полезут 2 потока? Никто не полезет в незалоченные. Я так понимаю у тебя несколько векторов и ты работаешь с элементами с одинаковым индексом: v1[i], v2[i], v3[i], где i не меняется. Делаешь еще один вектор мутексов и лочишь vm[i]. Т.к. i у тебя может быть миллион, а миллион мутексов это многовато, поэтому vm можно уменьшить в N раз и для блокировки использовать vm[i/N]. Тогда на каждые N ячеек будет общий мутекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 13:55 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima TЛочится не код, а данные к которым он обращается. Нет, технически таки лочится кусок кода от параллельного выполнения. Просто обычно вменяемые программисты в этом куске кода пишут обращение к данным и таким способом получают лок обращения данных (или, короче, лок данных). Но нубов лучше не путать. Они же теорию хотят. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:02 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov бабушкин зайчика можно не надо? "Надо, Федя, надо." Теория тут как собаке пятая нога. запаришься отлавливать такие баги потом ещё найди их сначала... где там цифра стоит 1, когда должна была быть 2, а ты понятия не имеешь, что должно было быть ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:06 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T но если есть f2() которая тоже работает с ячейкой A, то нет никакой пользы от блокировки f1() это именно мой случай а что делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:07 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Я так понимаю у тебя несколько векторов и ты работаешь с элементами с одинаковым индексом: v1[i], v2[i], v3[i], нет. Индексы всегда произвольные. НО есть шанс, что оба потока залезут в одинаковый v1[i] ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:08 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T но если есть f2() которая тоже работает с ячейкой A, то нет никакой пользы от блокировки f1() это именно мой случай а что делать? Читать написанное до конца 22304417 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:08 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Я так понимаю у тебя несколько векторов и ты работаешь с элементами с одинаковым индексом: v1[i], v2[i], v3[i], нет. Индексы всегда произвольные. НО есть шанс, что оба потока залезут в одинаковый v1[i] Один поток работает только с одним конкретным i или с разными? Т.е. {v1[5], v2[5], v3[5]} или {v1[4], v2[7], v3[6]} ? Если первое, то мутекс как я писал 22304417 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Мне кажется что поиск свободных дырок в массиве (задачка o(n) асимптоматичная) - нивелирует вообще все выгоды которые автор хочет получить от мнимых оптимизаций и кешей и потоков. Тут по смыслу больше не vector подходит а set. Но это моё частное мнение и если автор хочет - ну пускай делает пробы с o(n) по массиву-миллионнику. P.S. Scientia potentia est. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:12 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Dima TЛочится не код, а данные к которым он обращается. Нет, технически таки лочится кусок кода от параллельного выполнения. Просто обычно вменяемые программисты в этом куске кода пишут обращение к данным и таким способом получают лок обращения данных (или, короче, лок данных). Но нубов лучше не путать. Они же теорию хотят. так я же так и хочу - внутри вызываемой ф-и делается запись в вектор, а ф-я лочится или это другое? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:12 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T но если есть f2() которая тоже работает с ячейкой A, то нет никакой пользы от блокировки f1() это именно мой случай а что делать? https://ru.m.wikipedia.org/wiki/Параллельные_вычисления ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton Мне кажется что поиск свободных дырок в массиве (задачка o(n) асимптоматичная) - нивелирует вообще все выгоды которые автор хочет получить от мнимых оптимизаций и кешей и потоков. Тут по смыслу больше не vector подходит а set. Но это моё частное мнение и если автор хочет - ну пускай делает пробы с o(n) по массиву-миллионнику. P.S. Scientia potentia est. а не надо искать, надо вектор дырок держать Dima T бабушкин зайчик пропущено... нет. Индексы всегда произвольные. НО есть шанс, что оба потока залезут в одинаковый v1[i] Один поток работает только с одним конкретным i или с разными? Т.е. {v1[5], v2[5], v3[5]} или {v1[4], v2[7], v3[6]} ? Если первое, то мутекс как я писал 22304417 каждый поток может залезть в v1[1] ИЛИ v1[2] ИЛИ vN[M] - в любой НО всегда есть шанс, что оба залезут в одну ячейку и такой баг потом хер поймаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Никто не полезет в незалоченные. Я так понимаю у тебя несколько векторов и ты работаешь с элементами с одинаковым индексом: v1[i], v2[i], v3[i], где i не меняется. Делаешь еще один вектор мутексов и лочишь vm[i]. Т.к. i у тебя может быть миллион, а миллион мутексов это многовато, поэтому vm можно уменьшить в N раз и для блокировки использовать vm[i/N]. Тогда на каждые N ячеек будет общий мутекс. Не сработает, потому что в задаче N не константно и может увеличиваться. Всё равно придётся блокировать доступ ко всему массиву. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:16 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчикзапаришься отлавливать такие баги потом Вот именно поэтому-то "опыт - сын ошибок трудных ". Отловишь пару и враз получишь левель ап. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:17 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dimitry Sibiryakov пропущено... Нет, технически таки лочится кусок кода от параллельного выполнения. Просто обычно вменяемые программисты в этом куске кода пишут обращение к данным и таким способом получают лок обращения данных (или, короче, лок данных). Но нубов лучше не путать. Они же теорию хотят. так я же так и хочу - внутри вызываемой ф-и делается запись в вектор, а ф-я лочится или это другое? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:17 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dimitry Sibiryakov пропущено... Нет, технически таки лочится кусок кода от параллельного выполнения. Просто обычно вменяемые программисты в этом куске кода пишут обращение к данным и таким способом получают лок обращения данных (или, короче, лок данных). Но нубов лучше не путать. Они же теорию хотят. так я же так и хочу - внутри вызываемой ф-и делается запись в вектор, а ф-я лочится или это другое? Так это выглядит в простейшем случае Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:18 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик так я же так и хочу - внутри вызываемой ф-и делается запись в вектор, а ф-я лочится или это другое? вот только Dima T говорит, что это не поможет и я с ним согласен, если сами данные не лочатся Dima T Так это выглядит в простейшем случае так а ячейка в v то залочится или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:19 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик бабушкин зайчик так я же так и хочу - внутри вызываемой ф-и делается запись в вектор, а ф-я лочится или это другое? вот только Dima T говорит, что это не поможет и я с ним согласен, если сами данные не лочатся ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:22 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ни разу блокировок не писал. Лочится кусок кода.. Второй поток не исполнит ЭТОТ КУСОК ну вот, я про тоже, не подходит это ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:22 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp ни разу блокировок не писал. Лочится кусок кода.. Второй поток не исполнит ЭТОТ КУСОК ну вот, я про тоже, не подходит это ТЗ где?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:24 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp ТЗ где?))) править вектор в несколько потоков БЕЗ data race и sms ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:25 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Заполнил вектор на миллион - отдал потоку. Заполнил второй - отдал второму потоку. НИЧЕГО НЕ ЛОЧИМ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:26 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp ТЗ где?))) править вектор в несколько потоков, и чтобы всё чётко ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:26 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp бабушкин зайчик, Заполнил вектор на миллион - отдал потоку. Заполнил второй - отдал второму потоку. НИЧЕГО НЕ ЛОЧИМ он правится потоками бесконечное кол-во раз по одной ячейке за раз ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:26 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton Мне кажется что поиск свободных дырок в массиве (задачка o(n) асимптоматичная) - нивелирует вообще все выгоды которые автор хочет получить от мнимых оптимизаций и кешей и потоков. Тут по смыслу больше не vector подходит а set. Но это моё частное мнение и если автор хочет - ну пускай делает пробы с o(n) по массиву-миллионнику. P.S. Scientia potentia est. а не надо искать, надо вектор дырок держать Еще один вектор где лежат одни дырки? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:29 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton Еще один вектор где лежат одни дырки? адреса дырок ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:29 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик PetroNotC Sharp бабушкин зайчик, Заполнил вектор на миллион - отдал потоку. Заполнил второй - отдал второму потоку. НИЧЕГО НЕ ЛОЧИМ он заполняется потоками ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:31 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Один поток работает только с одним конкретным i или с разными? Т.е. {v1[5], v2[5], v3[5]} или {v1[4], v2[7], v3[6]} ? Если первое, то мутекс как я писал 22304417 каждый поток может залезть в v1[1] ИЛИ v1[2] ИЛИ vN[M] - в любой НО всегда есть шанс, что оба залезут в одну ячейку и такой баг потом хер поймаешь Начни с простого - один мутекс на всех, код будет как я выше показал 22304455 Только оптимизируй код так чтобы сначала подготовить нужные данные, затем блокировка, быстро прочитать/записать и снять блокировку. Будет тормозить - тогда будешь дальше усложнять работу с блокировками. К тому времени немного опыта добавится. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:32 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton Еще один вектор где лежат одни дырки? адреса дырок А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:33 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Мне нравится дизайн))) Тарелок на столе нет. Все потоки едоки варят кастрюлю супа. Потом как сварили, начинают есть все из одной. Толкаясь и матерясь. Почему никто в очередь не ставит строго по одному. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:34 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик пропущено... адреса дырок А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. Кстати, если у автора есть массив дырок, то не очень понятен его первый пост - где он предлагал вводить булеву переменную в каждую ячейку - признак того, что ячейка пустая. Ну а как началась многопоточность то ваще. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:38 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav mayton пропущено... А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. Кстати, если у автора есть массив дырок, то не очень понятен его первый пост - где он предлагал вводить булеву переменную в каждую ячейку - признак того, что ячейка пустая. Ну а как началась многопоточность то ваще. Одно другому не мешает: флаг пустоты нужен при проверке когда обращаешься к конкретной ячейке, а список индексов пустых для добавления новых, иначе перебор всего массива в поисках пустой. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:43 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T бабушкин зайчик пропущено... каждый поток может залезть в v1[1] ИЛИ v1[2] ИЛИ vN[M] - в любой НО всегда есть шанс, что оба залезут в одну ячейку и такой баг потом хер поймаешь Начни с простого - один мутекс на всех, код будет как я выше показал 22304455 Только оптимизируй код так чтобы сначала подготовить нужные данные, затем блокировка, быстро прочитать/записать и снять блокировку. Будет тормозить - тогда будешь дальше усложнять работу с блокировками. К тому времени немного опыта добавится. Я вот честно не вижу смысла в мутексе вообще... может опыта конечно мало, но он очевидно НЕ залочит сами данные, а без этого совершенно накласть на всё остальное. А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым... вешать где-то флаг, что эта ячейка занята и чекать его каждый раз? это на сколько же %% похерит производительность? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:43 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton бабушкин зайчик пропущено... адреса дырок А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым... Вообще-то для этих целей мутекс используют обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, А ты слышал что оракл не блокировочник а сиквел блокировочник? Никто ведь не помер. Узко вопросы задаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:46 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton пропущено... А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток Достаточно добавить отдельный мутекс для работы с этим массивом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:49 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T бабушкин зайчик А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым... Вообще-то для этих целей мутекс используют обычно. а мой случай обычный? В моём случае он заблочит ячейку? Потому что даже если он заблочит весь вектор, это уже НЕ подходит. Но он вроде даже и вектор не лочит... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:49 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик это на сколько же %% похерит производительность? Никто на это не ответит. Программирование - это практическая наука. А моделируемый объект (программа) настолько сложен что мы не в состоянии создать формулу времени отклика. Напиши макет кода. Запускай. И смотри как он работает. Симуляция - это нормальный способ замера времени. Физики так делают часто. Симулируют потоки частиц и смотрят потом как оно. Меряют. Тоесть смысл моего поста в том что мы не можем предложить улучшение к пустоте. Нам нужен объект. Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. Я понимаю что для тебя это игровая задача и ты по ходу придумываешь брейнштомом всякие костыли и подпорки в виде массивов индексов. Но мы просто топчемся на месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:50 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T бабушкин зайчик пропущено... ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток Достаточно добавить отдельный мутекс для работы с этим массивом. и все будут висеть и ждать его? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:50 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Почитай про синхронизацию доступа: https://www.google.com/search?q=синхронизация доступа к данным С https://habr.com/ru/post/182610/ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:52 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:53 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчики все будут висеть и ждать его? Нет, только те, кого ты заставишь это делать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:56 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:57 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T petrav пропущено... Кстати, если у автора есть массив дырок, то не очень понятен его первый пост - где он предлагал вводить булеву переменную в каждую ячейку - признак того, что ячейка пустая. Ну а как началась многопоточность то ваще. Одно другому не мешает: флаг пустоты нужен при проверке когда обращаешься к конкретной ячейке, а список индексов пустых для добавления новых, иначе перебор всего массива в поисках пустой. Ну если нам нужны операции со всем массивом, то да. Например, посчитать сумму всех не пустых полей. Но это снова потребует блокировки всего массива вместе с массивом дырок, а не на уровне отдельных ячеек. Кстати, если массив дырок и дырок много, то потребуется уже смещать влево массив дырок. А аффтар этага ни хател. Короче, это ржачная тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 14:57 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
ТС, тебя закроют. Код гони с проблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:00 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition Это-же не все. Дальше ты писал еще про "адреса дырок". Что с ними делать? Ты их уже отменяешь? И еще надо-бы знать сколько будет потоков. Если их будет 100500 - тогда наверное лучше их ставить в некую очердь команд. И надо знать (примерно) характер и род доступа к массиву. Если он - когерентный - то мы можем шибко соптимизировать на близких адресах хотя-бы в пределах кеш-линий или страниц. Если между потоками не нужен жесткий ордеринг команд - то мы можем переупорядочить поток команд таким образом чтобы мы больше писали в кеш-линию и страницу чем рандомно. Так работали старые жесткие диски (NCQ/TCQ). И вроде-бы никто не замечал логических ошибок чтения записи. Всё было прозрачно. И вообще чем больше твой массив - тем больше надо думать об эффекте L2/L3. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:00 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Хотя дырки можно класть в конец массива и брать только с конца массива. Если нам не важна последовательность в результирующем массиве. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:02 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petravКстати, если массив дырок и дырок много, то потребуется уже смещать влево массив дырок. Массив дырок может быть, например, очередью. Или стэком. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:03 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav, У него было волшебное слово "место" в массиве.Это он индекс наверно))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:04 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav Хотя дырки можно класть в конец массива и брать только с конца массива. Если нам не важна последовательность в результирующем массиве. Да. У него получается кольцевой буфер. Но это все настолько сильно изменяет первую постановку что можно просто выкидывать старые оптимизации и наново проектировать новую задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:07 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, Можно проще. Поток на вектор с дырками и поток на вектор без дырок. Два вектора он сам предложил. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:12 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav Но это снова потребует блокировки всего массива вместе с массивом дырок, а не на уровне отдельных ячеек. Кстати, если массив дырок и дырок много, то потребуется уже смещать влево массив дырок. Если для этого массива дырок сделать отдельный мутекс, то все можно будет делать. petrav А аффтар этага ни хател. Он про другие массивы не хотел, а про этот даже не подумал. mayton его этим моментом обрадовал )) ТС похоже даже в теории не представляет как писать для многопоточности. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:12 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Можно проще. Поток на вектор с дырками и поток на вектор без дырок. Два вектора он сам предложил. нельзя. Они в одном потоке должны быть. Точнее дырки сами по себе, а потокИ к ним обращаются. Нельзя их в какой-то поток пихать. Dima T Он про другие массивы не хотел, а про этот даже не подумал. stack в принципе решает эту проблему ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:21 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Он про другие массивы не хотел, а про этот даже не подумал. stack в принципе решает эту проблему stack тоже нельзя с нескольких потоков одновременно пользовать. queue тоже. Все классы-контейнеры из std непотокобезопасные, поэтому при многопоточной работе с ними надо дополнительно прописывать синхронизацию доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:25 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Автору нужно написать прототип класса. Где будет два закрытых массива: значения и дырки. Описать сигнатуру методов и требования к этим методам в плане потокобезопасности. Тогда можно предметно говорить как реализовывать этот класс. Иначе толку не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:29 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
так, а что если при каждой записи создавать очередь? чаще то будет чтение идти, запись так то сильно пореже но чтобы совсем исключить шанс data race, что если эту попытку записи класть в очередь как-то (я не знаю как ф-ю покласть в очередь - можно ли?) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:37 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Еще немного и врубишься что потокам надо создавать или нарезать задачи. А не наоборот, городить потоки возле одной кастрюли ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик так, а что если при каждой записи создавать очередь? Как ты себе это представляешь? Покажи как в коде это будет выглядеть. Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:48 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T, По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется. Из двух зол выбрали меньшее.) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 15:51 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T, Правда это для для java. Но суть что код надо подстраивать под параллелизм. Ибо компромиссы! авторКомпромиссы Стратегия высокого параллелизма реагирует на требования высокого параллелизма снижением охвата транзакции до уровня, минимально возможного в данной архитектуре. Это приводит к более быстрому завершению (фиксации или откату) транзакции, чем при использовании стратегии слоя API. Однако, как учит нас история хорошего корабля Vasa (см. Ресурсы), вы не можете иметь все и сразу. Жизнь состоит из компромиссов, и обработка транзакций – не исключение. Не можете же вы впрямь рассчитывать одновременно и на такой же уровень надежности обработки транзакций, что и в стратегии слоя API, и на максимальное количество параллельных обращений и максимальную пропускную способность при пиковых нагрузках. http://www.k-press.ru/cs/2009/3/ts/ts.asp ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:03 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Как ты себе это представляешь? Покажи как в коде это будет выглядеть. это я у общественности спрашиваю - как Dima T Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна. да не испугался, а не вижу смысла, если вектор висит особняком, а потоки лочить, то какой толк от мутексов? есть толк от них? Залочил поток и другой тоже залочил, так они же всё равно в одну ячейку смогут записать, потому что она то НЕ залочена... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:04 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется. В вэб-сервере каждый поток сам по себе работает и нет никаких данных разделяемых между разными потоками, нечего блокировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:05 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Dima T, По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется. Из двух зол выбрали меньшее.) Ну... чисто технически Оракл тоже использует блокировки. На очень короткое время и не для транзакций а для поддержания консистентности db_blocks (это такие 8К кусочки памяти) в области buffer_pull когда конкурирующие SQL-процессы пишут и читают один и тот-же блок. Как разрабатывать ПО вообще без блокировок - ХЗ. Есть для этого технология Акторов. Но у нее есть свои проблемы. И свои сложности дизайна. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:09 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Как ты себе это представляешь? Покажи как в коде это будет выглядеть. это я у общественности спрашиваю - как Dima T Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна. да не испугался, а не вижу смысла, если вектор висит особняком, а потоки лочить, то какой толк от мутексов? есть толк от них? Залочил поток и другой тоже залочил, так они же всё равно в одну ячейку смогут записать, потому что она то НЕ залочена... Каша у тебя в голове, не понимаешь как блокировки работают. Нельзя залочить ячейку, нет такой операции "залочить ячейку". Я ссылки давал выше 22304501 , почитал? Почитай хотя бы статью на хабре. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T, В веб потоки тоже ресурс. И очень даже дорогой. У веб сервера их 10 штук примерно. А юзверей пусть пол лимона. ТС похоже свой сервер пишет))))) Где ище миллион вектор? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, Я же не о технических говорил. Нельзя узко про одни блоки вещать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:14 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Ты пишешь дескыть Оракл не использует блокировки. Я уточняю что в понимании ОС он их еще как использует. Просто на уровне транзакций - другой подход. И другие блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T, Вообще, в веб параллельный доступ осуществляет субд.. Почему автор решил субд заново изобрести не знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:16 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton Ты пишешь дескыть Оракл не использует блокировки. Я уточняю что в понимании ОС он их еще как использует. Просто на уровне транзакций - другой подход. И другие блокировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:17 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Я ссылки давал выше 22304501 , почитал? Почитай хотя бы статью на хабре. обязательно прочитаю, но позже. Так я и написал, что не залочится. Это то я понимаю. Я не понимаю, зачем мне мутекс в таком случае... Надеюсь хабр даст ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:18 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Кстати, есть же концепция "множество читателей - один писатель". Только я, за ненадобностью, не помню как её реализовать на C++. Даже названия не помню. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:23 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Я ссылки давал выше 22304501 , почитал? Почитай хотя бы статью на хабре. обязательно прочитаю, но позже. Так я и написал, что не залочится. Это то я понимаю. Я не понимаю, зачем мне мутекс в таком случае... Надеюсь хабр даст ответ. Метод в векторе Добавить сначала запишет объект а потом увеличит счетчик Count. Если два потока сразу, то эти две строки пемешаются. Райзе будет. Так понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:24 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Еще про fairness не говорили. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:25 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, Шо будет если строки перемешать?)))) Код: plaintext 1. 2. 3.
Давай уж код начнем писать))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:34 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton, Самый простой способ Не блокирования это клонирование коллекции или ее куска. Широко применяется. Нет никаких особых последствий. И никаких мьютексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:41 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
А я предлагаю обсудить кто первый получит доступ к g_mutex после того как самый первый поток его отпускает. Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:42 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp бабушкин зайчик пропущено... обязательно прочитаю, но позже. Так я и написал, что не залочится. Это то я понимаю. Я не понимаю, зачем мне мутекс в таком случае... Надеюсь хабр даст ответ. Метод в векторе Добавить сначала запишет объект а потом увеличит счетчик Count. Если два потока сразу, то эти две строки пемешаются. Райзе будет. Так понятно? мне это не поможет, коли от кэша зависит, кто там первый встал того и тапки мы имеем "старые данные" И "новые данные", т.е. один поток был раньше другого а вот какие именно попадут в ячейку... Я тут придумал вот чё: а шо если держать несколько ф-й, каждая из которых пишет в диапазон ячеек... ф1 = 0-9999 ф2 = 10000-19999 (you got the idea) И вот ИХ лочить? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:45 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Я тут придумал вот чё: а шо если держать несколько ф-й, каждая из которых пишет в диапазон ячеек... ф1 = 0-9999 ф2 = 10000-19999 you got the idea. И вот ИХ лочить? Не надо их лочить. Это идеальный параллелизм. Shared Nothing. Только в конце работы тебе надо сделать ::join() всех потоков чтобы убедится что корректировок массива уже не будет. И не забывай про DWORD/ia32. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:49 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, В java лочатся все публичные методы для вектора с названием фабричного метода Collections.synchronizedXxxxx Но есть и штук 30 других коллекций. ... Если диапазон, то лочить не надо. Каждому потоку по тарелке ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 16:53 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton Это идеальный параллелизм. Shared Nothing. ну вообще-то шанс то остаётся, что 2 потока залезут в одну ячейку ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:00 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
ТС, идите в..... Qt! Чем вы будете лисапед писать первый раз в жизни. авторQtConcurrent имен предоставляет API - интерфейсы высокого уровня , которые делают возможным написание многопоточных программ без использования низкоуровневых поточных примитивов , таких как мьютексы, блокировки чтение-запись, условия ожидания или семафоры. Программы, написанные с помощью QtConcurrent, автоматически регулируют количество используемых потоков в соответствии с количеством доступных ядер процессора. Это означает, что приложения, написанные сегодня, будут продолжать масштабироваться при развертывании в многоядерных системах в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:01 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик mayton Это идеальный параллелизм. Shared Nothing. ну вообще-то шанс то остаётся, что 2 потока залезут в одну ячейку Мне бабушка говорила - Не ешь с пола. - Одевай зимой шерстяные штаны. - И выравнивай доступ к памяти по регистру. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:02 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
mayton - И выравнивай доступ к памяти по регистру. хм? PetroNotC Sharp ТС, идите в..... Qt! Чем вы будете лисапед писать первый раз в жизни. авторQtConcurrent имен предоставляет API - интерфейсы высокого уровня , которые делают возможным написание многопоточных программ без использования низкоуровневых поточных примитивов , таких как мьютексы, блокировки чтение-запись, условия ожидания или семафоры. Программы, написанные с помощью QtConcurrent, автоматически регулируют количество используемых потоков в соответствии с количеством доступных ядер процессора. Это означает, что приложения, написанные сегодня, будут продолжать масштабироваться при развертывании в многоядерных системах в будущем. ВАУ! круто. вот оно, мечта!!1 жаль что говно ( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:09 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, )))) >жаль что говно ( Верю что транзакции в банке напишешь надежнее на тетрисе))) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:13 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик Dima T Я ссылки давал выше 22304501 , почитал? Почитай хотя бы статью на хабре. обязательно прочитаю, но позже. Так я и написал, что не залочится. Это то я понимаю. Я не понимаю, зачем мне мутекс в таком случае... Надеюсь хабр даст ответ. Потом и поговорим. О чем говорить если ты матчасть изучать не собираешься. Пиши однопоточно, иначе накосячишь. И про кучу векторов ты неверно совет mayton`а расширил, он всего лишь предложил вынести флаг свободной ячейки в vector<bool>. Это не значит что если у тебя N полей надо N векторов. Просто vector<bool> особенный, в нем 1 бит на значение, а тип bool - 1 байт. Экономия памяти в 8 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:34 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
petrav Кстати, есть же концепция "множество читателей - один писатель". Только я, за ненадобностью, не помню как её реализовать на C++. Даже названия не помню. :( Есть такое, std::shared_mutex, но он тормоз, т.к. счетчик читателей меж кэшей всех потоков гоняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:36 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
PetroNotC SharpГде ище миллион вектор? Тут: https://www.sql.ru/forum/1326703/vector-na-trillion-obektov Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2021, 17:48 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
Dima T Потом и поговорим. О чем говорить если ты матчасть изучать не собираешься. не было такого. Просто нет смысла её читать, если сутки не спал. Всё равно перечитывать потом. про vector<bool> говорят: "is a mess. DON't USE IT!" а тут : авторstd::vector<bool> behaves similarly to std::vector, but in order to be space efficient, it: Does not necessarily store its elements as a contiguous array. Exposes class std::vector<bool>::reference as a method of accessing individual bits. In particular, objects of this class are returned by operator[] by value. Does not use std::allocator_traits::construct to construct bit values. Does not guarantee that different elements in the same container can be modified concurrently by different threads. уверен, что это хорошая мысль? Dimitry Sibiryakov интересно, но там больше про БД а вообще не мой случай ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 00:15 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
вот мой случай за исключением того, что там 2 потока работают с разными кусками вектора (0-10 и 10-20), поэтому проблемы нет а у меня оба работают с 0-20 и проблема есть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
у меня потоки нужны для чтения, а на запись операций в разы меньше поэтому можно было бы либо лочить вектор просто (его ведь читать можно будет?), но это затраты, как выше описано либо запись делать одним потоком (если можно одновременно в многопоточном приложении такое сделать? По идее можно, ведь я могу внутри ф-и, которая вызывается на событии, сделать разделение на чтение/запись и параллелить только чтение...) (ушёл читать хабр) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 02:11 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик автор Does not guarantee that different elements in the same container can be modified concurrently by different threads. уверен, что это хорошая мысль? От того что в описании вектора подобное не написано не означает что с ним можно работать многопоточно без синхронизации. Я об этом уже писал 22304542 Можно работать многопоточно без синхронизации только если разработчик явно об этом заявляет. Ключевое слово threadsafe (потокобезопасно). Например ConcurrentDictionary в C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 07:28 |
|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#18+
бабушкин зайчик, >у меня потоки нужны для чтения, а на запись операций в разы меньше = где обоснование что они нужны если кода нет и ты их не писал в жизни? Вполне можно взять Фоновый Один поток и пусть работает тихо и незаметно. Если одним писать и другим читать, то это и есть подводные камни. 6 страниц а ты до сих пор ничего не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 08:01 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017237]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
137ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 475ms |
0 / 0 |