Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
petrav
Member

Откуда:
Сообщений: 2861
Хотя дырки можно класть в конец массива и брать только с конца массива.
Если нам не важна последовательность в результирующем массиве.
5 апр 21, 15:02    [22304514]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

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

Массив дырок может быть, например, очередью. Или стэком.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 15:03    [22304516]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
petrav,
У него было волшебное слово "место" в массиве.Это он индекс наверно)))
5 апр 21, 15:04    [22304517]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
petrav
Хотя дырки можно класть в конец массива и брать только с конца массива.
Если нам не важна последовательность в результирующем массиве.

Да. У него получается кольцевой буфер. Но это все настолько сильно изменяет
первую постановку что можно просто выкидывать старые оптимизации и наново
проектировать новую задачу.
5 апр 21, 15:07    [22304520]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton,

Можно проще. Поток на вектор с дырками и поток на вектор без дырок. Два вектора он сам предложил.
5 апр 21, 15:12    [22304527]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
petrav
Но это снова потребует блокировки всего массива вместе с массивом дырок, а не на уровне отдельных ячеек.

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

Если для этого массива дырок сделать отдельный мутекс, то все можно будет делать.
petrav
А аффтар этага ни хател.

Он про другие массивы не хотел, а про этот даже не подумал. mayton его этим моментом обрадовал ))

ТС похоже даже в теории не представляет как писать для многопоточности.
5 апр 21, 15:12    [22304528]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
PetroNotC Sharp
Можно проще. Поток на вектор с дырками и поток на вектор без дырок. Два вектора он сам предложил.

нельзя. Они в одном потоке должны быть. Точнее дырки сами по себе, а потокИ к ним обращаются. Нельзя их в какой-то поток пихать.
Dima T
Он про другие массивы не хотел, а про этот даже не подумал.

stack в принципе решает эту проблему

Сообщение было отредактировано: 5 апр 21, 15:19
5 апр 21, 15:21    [22304535]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
Dima T
Он про другие массивы не хотел, а про этот даже не подумал.

stack в принципе решает эту проблему

stack тоже нельзя с нескольких потоков одновременно пользовать. queue тоже.

Все классы-контейнеры из std непотокобезопасные, поэтому при многопоточной работе с ними надо дополнительно прописывать синхронизацию доступа.
5 апр 21, 15:25    [22304542]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
petrav
Member

Откуда:
Сообщений: 2861
Автору нужно написать прототип класса. Где будет два закрытых массива: значения и дырки.
Описать сигнатуру методов и требования к этим методам в плане потокобезопасности.

Тогда можно предметно говорить как реализовывать этот класс. Иначе толку не будет.
5 апр 21, 15:29    [22304544]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
так, а что если при каждой записи создавать очередь?
чаще то будет чтение идти, запись так то сильно пореже
но чтобы совсем исключить шанс data race, что если эту попытку записи класть в очередь как-то (я не знаю как ф-ю покласть в очередь - можно ли?)

Сообщение было отредактировано: 5 апр 21, 15:29
5 апр 21, 15:37    [22304553]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
бабушкин зайчик,
Еще немного и врубишься что потокам надо создавать или нарезать задачи.
А не наоборот, городить потоки возле одной кастрюли
5 апр 21, 15:45    [22304560]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
так, а что если при каждой записи создавать очередь?

Как ты себе это представляешь? Покажи как в коде это будет выглядеть.

Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна.
5 апр 21, 15:48    [22304567]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Dima T,
По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется.
Из двух зол выбрали меньшее.)
5 апр 21, 15:51    [22304574]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Dima T,
Правда это для для java.
Но суть что код надо подстраивать под параллелизм.
Ибо компромиссы!
автор
Компромиссы
Стратегия высокого параллелизма реагирует на требования высокого параллелизма снижением охвата транзакции до уровня, минимально возможного в данной архитектуре. Это приводит к более быстрому завершению (фиксации или откату) транзакции, чем при использовании стратегии слоя API. Однако, как учит нас история хорошего корабля Vasa (см. Ресурсы), вы не можете иметь все и сразу. Жизнь состоит из компромиссов, и обработка транзакций – не исключение. Не можете же вы впрямь рассчитывать одновременно и на такой же уровень надежности обработки транзакций, что и в стратегии слоя API, и на максимальное количество параллельных обращений и максимальную пропускную способность при пиковых нагрузках.

http://www.k-press.ru/cs/2009/3/ts/ts.asp
5 апр 21, 16:03    [22304588]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
Dima T
Как ты себе это представляешь? Покажи как в коде это будет выглядеть.

это я у общественности спрашиваю - как
Dima T
Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна.

да не испугался, а не вижу смысла, если вектор висит особняком, а потоки лочить, то какой толк от мутексов?
есть толк от них? Залочил поток и другой тоже залочил, так они же всё равно в одну ячейку смогут записать, потому что она то НЕ залочена...
5 апр 21, 16:04    [22304589]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
PetroNotC Sharp
По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется.

В вэб-сервере каждый поток сам по себе работает и нет никаких данных разделяемых между разными потоками, нечего блокировать.
5 апр 21, 16:05    [22304590]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
PetroNotC Sharp
Dima T,
По правде говоря, без блокировок тоже можно работать. В веб даже рекомендуется.
Из двух зол выбрали меньшее.)

Ну... чисто технически Оракл тоже использует блокировки. На очень короткое время и не для
транзакций а для поддержания консистентности db_blocks (это такие 8К кусочки памяти) в области
buffer_pull когда конкурирующие SQL-процессы пишут и читают один и тот-же блок.

Как разрабатывать ПО вообще без блокировок - ХЗ. Есть для этого технология Акторов.
Но у нее есть свои проблемы. И свои сложности дизайна.
5 апр 21, 16:09    [22304594]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
Dima T
Member

Откуда:
Сообщений: 15689
бабушкин зайчик
Dima T
Как ты себе это представляешь? Покажи как в коде это будет выглядеть.

это я у общественности спрашиваю - как
Dima T
Чего ты так мутексов испугался? Они быстро работают, а без них многопоточная работа невозможна.

да не испугался, а не вижу смысла, если вектор висит особняком, а потоки лочить, то какой толк от мутексов?
есть толк от них? Залочил поток и другой тоже залочил, так они же всё равно в одну ячейку смогут записать, потому что она то НЕ залочена...

Каша у тебя в голове, не понимаешь как блокировки работают. Нельзя залочить ячейку, нет такой операции "залочить ячейку".
Я ссылки давал выше 22304501, почитал? Почитай хотя бы статью на хабре.
5 апр 21, 16:11    [22304599]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Dima T,
В веб потоки тоже ресурс. И очень даже дорогой.
У веб сервера их 10 штук примерно.
А юзверей пусть пол лимона.
ТС похоже свой сервер пишет)))))
Где ище миллион вектор?
5 апр 21, 16:11    [22304601]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton,
Я же не о технических говорил.
Нельзя узко про одни блоки вещать.
5 апр 21, 16:14    [22304609]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Ты пишешь дескыть Оракл не использует блокировки. Я уточняю что в понимании ОС он их еще как использует.

Просто на уровне транзакций - другой подход. И другие блокировки.
5 апр 21, 16:15    [22304611]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
Dima T,

Вообще, в веб параллельный доступ осуществляет субд..
Почему автор решил субд заново изобрести не знаю
5 апр 21, 16:16    [22304613]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7650
mayton
Ты пишешь дескыть Оракл не использует блокировки. Я уточняю что в понимании ОС он их еще как использует.

Просто на уровне транзакций - другой подход. И другие блокировки.
я написал он не блокировочник. Механизм другой! Без блоков!
5 апр 21, 16:17    [22304614]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
бабушкин зайчик
Member

Откуда: сетевой
Сообщений: 61
Dima T
Я ссылки давал выше 22304501, почитал? Почитай хотя бы статью на хабре.

обязательно прочитаю, но позже.
Так я и написал, что не залочится. Это то я понимаю. Я не понимаю, зачем мне мутекс в таком случае...
Надеюсь хабр даст ответ.
5 апр 21, 16:18    [22304616]     Ответить | Цитировать Сообщить модератору
 Re: как обнулить ячеку вектора (не удаляя)?  [new]
petrav
Member

Откуда:
Сообщений: 2861
Кстати, есть же концепция "множество читателей - один писатель". Только я, за ненадобностью, не помню
как её реализовать на C++. Даже названия не помню. :(
5 апр 21, 16:23    [22304620]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
Все форумы / C++ Ответить