|
как обнулить ячеку вектора (не удаляя)?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=57&msg=40059796&tid=2017237]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 161ms |
0 / 0 |