Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / C++ |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 6 вперед Ctrl→ все |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
|
||||||||
5 апр 21, 14:26 [22304471] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
он правится потоками бесконечное кол-во раз по одной ячейке за раз Сообщение было отредактировано: 5 апр 21, 14:21 |
||||
5 апр 21, 14:26 [22304472] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51017 |
Еще один вектор где лежат одни дырки? |
||||||||
5 апр 21, 14:29 [22304474] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
адреса дырок |
||||
5 апр 21, 14:29 [22304475] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
|
||||||||
5 апр 21, 14:31 [22304476] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Начни с простого - один мутекс на всех, код будет как я выше показал 22304455 Только оптимизируй код так чтобы сначала подготовить нужные данные, затем блокировка, быстро прочитать/записать и снять блокировку. Будет тормозить - тогда будешь дальше усложнять работу с блокировками. К тому времени немного опыта добавится. |
||||||||
5 апр 21, 14:32 [22304477] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51017 |
А как менеджерить этот вектор адресов дырок? И как его блокировать? Он ведь тоже будет играть по правилам твоей мультипоточки и ему точно также нужны будут мутексы или критические секции. |
||||||||
5 апр 21, 14:33 [22304478] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
Мне нравится дизайн))) Тарелок на столе нет. Все потоки едоки варят кастрюлю супа. Потом как сварили, начинают есть все из одной. Толкаясь и матерясь. Почему никто в очередь не ставит строго по одному. )) |
5 апр 21, 14:34 [22304480] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2861 |
Кстати, если у автора есть массив дырок, то не очень понятен его первый пост - где он предлагал вводить булеву переменную в каждую ячейку - признак того, что ячейка пустая. ![]() |
||||||||
5 апр 21, 14:38 [22304484] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Одно другому не мешает: флаг пустоты нужен при проверке когда обращаешься к конкретной ячейке, а список индексов пустых для добавления новых, иначе перебор всего массива в поисках пустой. |
||||||||
5 апр 21, 14:43 [22304489] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
Я вот честно не вижу смысла в мутексе вообще... может опыта конечно мало, но он очевидно НЕ залочит сами данные, а без этого совершенно накласть на всё остальное. А вот как обеспечить НЕвозможность записать в одну ячейку - вопрос остаётся открытым... вешать где-то флаг, что эта ячейка занята и чекать его каждый раз? это на сколько же %% похерит производительность? |
||||||||
5 апр 21, 14:43 [22304490] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
ты меня такими вопросами доведёшь до белого колена, плюну на всё и сделаю в один поток ![]() Сообщение было отредактировано: 5 апр 21, 14:39 |
||||||||
5 апр 21, 14:45 [22304491] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Вообще-то для этих целей мутекс используют обычно. |
||||
5 апр 21, 14:45 [22304492] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
бабушкин зайчик, А ты слышал что оракл не блокировочник а сиквел блокировочник? Никто ведь не помер. Узко вопросы задаешь. |
5 апр 21, 14:46 [22304493] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Достаточно добавить отдельный мутекс для работы с этим массивом. |
||||||||
5 апр 21, 14:49 [22304495] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
а мой случай обычный? В моём случае он заблочит ячейку? Потому что даже если он заблочит весь вектор, это уже НЕ подходит. Но он вроде даже и вектор не лочит... |
||||||||
5 апр 21, 14:49 [22304496] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51017 |
Никто на это не ответит. Программирование - это практическая наука. А моделируемый объект (программа) настолько сложен что мы не в состоянии создать формулу времени отклика. Напиши макет кода. Запускай. И смотри как он работает. Симуляция - это нормальный способ замера времени. Физики так делают часто. Симулируют потоки частиц и смотрят потом как оно. Меряют. Тоесть смысл моего поста в том что мы не можем предложить улучшение к пустоте. Нам нужен объект. Кстати у меня к тебе настойчивая модераторская просьба - огласить полное ТЗ. Я понимаю что для тебя это игровая задача и ты по ходу придумываешь брейнштомом всякие костыли и подпорки в виде массивов индексов. Но мы просто топчемся на месте. |
||||
5 апр 21, 14:50 [22304497] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
и все будут висеть и ждать его? |
||||||||
5 апр 21, 14:50 [22304498] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Почитай про синхронизацию доступа: https://www.google.com/search?q=синхронизация доступа к данным С https://habr.com/ru/post/182610/ |
5 апр 21, 14:52 [22304501] Ответить | Цитировать Сообщить модератору |
бабушкин зайчик Member Откуда: сетевой Сообщений: 61 |
так огласил же - запись в вектор в несколько потоков БЕЗ data race/race condition |
||||
5 апр 21, 14:53 [22304502] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
Нет, только те, кого ты заставишь это делать. Posted via ActualForum NNTP Server 1.5 |
||
5 апр 21, 14:56 [22304505] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
|
||||||||
5 апр 21, 14:57 [22304508] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2861 |
Ну если нам нужны операции со всем массивом, то да. Например, посчитать сумму всех не пустых полей. Но это снова потребует блокировки всего массива вместе с массивом дырок, а не на уровне отдельных ячеек. Кстати, если массив дырок и дырок много, то потребуется уже смещать влево массив дырок. А аффтар этага ни хател. ![]() Короче, это ржачная тема. ![]() |
||||||||
5 апр 21, 14:57 [22304509] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
ТС, тебя закроют. Код гони с проблемой. |
5 апр 21, 15:00 [22304511] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51017 |
Это-же не все. Дальше ты писал еще про "адреса дырок". Что с ними делать? Ты их уже отменяешь? И еще надо-бы знать сколько будет потоков. Если их будет 100500 - тогда наверное лучше их ставить в некую очердь команд. И надо знать (примерно) характер и род доступа к массиву. Если он - когерентный - то мы можем шибко соптимизировать на близких адресах хотя-бы в пределах кеш-линий или страниц. Если между потоками не нужен жесткий ордеринг команд - то мы можем переупорядочить поток команд таким образом чтобы мы больше писали в кеш-линию и страницу чем рандомно. Так работали старые жесткие диски (NCQ/TCQ). И вроде-бы никто не замечал логических ошибок чтения записи. Всё было прозрачно. И вообще чем больше твой массив - тем больше надо думать об эффекте L2/L3. |
||||||||
5 апр 21, 15:00 [22304512] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 6 вперед Ctrl→ все |
Все форумы / C++ | ![]() |