|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Есть две структуры. Данные в структурах обновляются асинхронно. Мне нужно по ключу(reference_number) найти и переписать поле(priority_level). Делаю так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Но за время поиска в цикле (в одном таске) приходят новые данные и я отправляю пару пакетов со старыми данными (в другом таске). Хотел сделать какой нибудь хэш тэйбл или дикшинэри но никак не соображу как связать поля. Есть более быстрое решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 09:41 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, критическая секция для начала, куча проблем сразу отпадёт ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 09:59 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7, критическая секция для начала, куча проблем сразу отпадёт я не могу блокировать обновление данных. они приходят из разных источников и я должен принять их немедленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:02 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, тогда вам задачу надо более подробно описать, потому что сликом много может быть ньюансов в зависимости от поддерживаемых операций ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:05 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Тебе нужен не поиск в массивах. А нормальная структура данных типа hashtable с поддержкой concurrency. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:14 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonТебе нужен не поиск в массивах. А нормальная структура данных типа hashtable с поддержкой concurrency. в этом то и вопрос - как связать поля в hashtable. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:15 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
mayton, видел concurrency hashtable на си? он на месяцы влезет у него может задача вообще простенькая ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:19 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Вопрос в чем? Нагуглить? Или ещё раз пересмотреть задачу. Мне кажется что постановка - гипертрофированая. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 10:28 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7kealon(Ruslan)jenya7, критическая секция для начала, куча проблем сразу отпадёт я не могу блокировать обновление данных. они приходят из разных источников и я должен принять их немедленно. принять и положить - разные задачи ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 12:30 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Я посмотрел реализацию hashtable Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
тут используется динамическое выделение памяти а мне это не нужно – после получения списка содержащего 12 элементов (table1.items) я его сразу должен положить в таблицу. А в другом месте вытащить значение table2[current_idx].priority_level = search(table2[current_idx]. reference_number) Как мне переделать hashtable? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 13:11 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 13:31 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса?всегда. - нет но есть алгоритмы устранения коллизий, но они к сожалению мало подточены на многопоточку я же вам говорю, выдайте просто интерфейс и что он должен делать, будет проще подобрать - нету универсальных решений ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:08 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7int hashIndex = hashCode(key); не возвращает уникальное значение на каждый ключ. а есть алгоритм позволяющий установить уникальное значение индекса?всегда. - нет но есть алгоритмы устранения коллизий, но они к сожалению мало подточены на многопоточку я же вам говорю, выдайте просто интерфейс и что он должен делать, будет проще подобрать - нету универсальных решений table1.items приходят сразу все 12 элементов в одном списке - при получении я могу заполнить хэш таблицу. table2[х] приходят по одному - при получении я могу вытянуть значение из хэш таблицы. проблема в реализации хэш таблицы без лишних наворотов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:19 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Как вариант хранить таблицы отсортированными по возрастанию reference_number, тогда сводится все к коду Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
dummy - соответственно заглушки пустых ячеек. По скорости даст фору любой хеш таблице, и да критическая секция нужна в любом случае, если к коду обращаются несколько потоков, и понятие немедленно в дискретном мире компьютеров это как то сильно сказано. и на момент сортировки таблиц тоже должны быть критические секции (т.е. после каждой вставки/удаления) Хм, тут возникла другая идея: использовать связанные списки, тогда вставки и удаления будут проходить быстрее, но замедлит проход по спискам, и очень замедлит произвольный доступ. В целом реализация будет зависеть от того какие задачи наиболее критичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:39 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Да о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:29 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonДа о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. +1 std::unordered_map и std::mutex для синхронизации доступа ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:36 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Dima TmaytonДа о чем тут спор вообще. Автор - новичок. Пусть берет самую обычную стандартную (несинхронизированную) хеш-табличку, оборачивает ее EnterCriticalSection(..) или линуксовый и тестит. Если ему ее не хватит - велком с оптимизиацией. +1 std::unordered_map и std::mutex для синхронизации доступа у меня нет std::unordered_map. голый С. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:48 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7у меня нет std::unordered_map. голый С. А можете пояснить выбор средств? Вот нафига это дрочево кому-то нужно в 2019-м году? Ваша задача, например, на голанге решается тривиально, парой десятков строк кода. При этом сам голанг изучается за три дня. Если это студенческая работа, то, конечно, базара нет, а если работа практическая, то вот ну нафига? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:36 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Ембедщик наверно. Но не знает алгоритмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:38 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
Лысый дядькаjenya7у меня нет std::unordered_map. голый С. А можете пояснить выбор средств? Вот нафига это дрочево кому-то нужно в 2019-м году? Ваша задача, например, на голанге решается тривиально, парой десятков строк кода. При этом сам голанг изучается за три дня. Если это студенческая работа, то, конечно, базара нет, а если работа практическая, то вот ну нафига? какой голанг я под микроконтролер пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 17:57 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, ну наконец-то. Не прошло и дня. Ты написал - данные в структурах обновляются асинхронно. Вот давай рассказывай как реализованна асинхронность в твоём Х-контроллере? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 18:24 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
maytonjenya7, ну наконец-то. Не прошло и дня. Ты написал - данные в структурах обновляются асинхронно. Вот давай рассказывай как реализованна асинхронность в твоём Х-контроллере? там есть RTOS (VxWorks). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 18:33 |
|
Быстрый поиск поля в массиве в С
|
|||
---|---|---|---|
#18+
jenya7, уже лучше, многозадачности значит нет а отправлять то что должен? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 20:03 |
|
|
start [/forum/topic.php?fid=57&msg=39769845&tid=2017670]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 384ms |
0 / 0 |