|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#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?fid=57&msg=40059945&tid=2017237]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 150ms |
0 / 0 |