|
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 124
|
|
.NET 4.x Lock должен блокировать при заполнении - чтение и заполнение, а при чтении ничего12.06.2018, 02:16. Показов 1191. Ответов 6
Метки нет (Все метки)
Доброго времени суток, проблема с блокировкой потоков lock.
1й поток в цикле заполняет коллекцию и 3 потока читают, необходимо блокировать 2й, 3й и 4й поток, когда 1 поток добавляет элемент, но в то же время не нужно блокировать потоки при чтении, допустим 3 потока могут читать без блокировок. Проблема в том, что если везде указать lock, то и при чтении будут блокировки, что негативно сказывается на производительности =(
0
|
|
| 12.06.2018, 02:16 | |
|
Ответы с готовыми решениями:
6
Программа вылетает с ошибкой нарушения прав доступа при чтении при заполнении дерева более чем 50 элементами При заполнении Edit-а в файл ничего не записывается Автоматическое заполнение данных в поле таблицы при заполнении формы по связанной таблице |
|
|
|
| 12.06.2018, 04:05 | |
|
KinDer015, посмотрите в сторону использования вот этого класса для блокировки.
1
|
|
|
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 124
|
|
| 12.06.2018, 04:28 [ТС] | |
|
Спасибо за совет, завтра протестирую
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 12.06.2018, 08:53 | ||
|
Некоторые — очень даже нужно блокировать при чтении.
0
|
||
|
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 124
|
|||||||||||
| 12.06.2018, 20:08 [ТС] | |||||||||||
|
SortedDictionary в нем 200к значений, для теста в реальности будет 10-15к (для бинарного поиска по скорости практически не отличается от 200к), мне необходимо изменять около 400 тыс. значений по ключу в сек. и одновременно делать выборку по ключу 600 тыс. раз в секунду (и всего лишь 100-200 добавлений в сек.)
Пытаюсь добиться этой производительности на четырехъядерном процессоре xeon x3440 с помощью многопоточности. (на данный момент лучшая производительность на 16 потоках) Добавив cacheLock.EnterWriteLock(); в цикл с добавлением новых значений, удалось избавится от краша приложения, за 0,85 сек. потоки читают 600к/сек. и изменяют 400к/сек., по скорости работы на мой взгляд даже очень не плохо, в 3 раза быстрее чем с lock, но немного смущает тот факт, что после 10-30 повторений multithreadSortDic() выводит в консоль "Not found" 1 или 2 раза. Если поставить блокировки везде, то скорость упадет в 3 раза. Может быть просто костыльным методом повторять поиск, если выбило "Not found"? xD Или есть другие способы? (еще не пробовал пул потоков) немного *овнокода xD Кликните здесь для просмотра всего текста
Добавлено через 7 минут Еще есть предположение, что если заблокировать не только запись для других потоков но и чтение в момент добавления, то данная проблема исчезнет, но в этом случае выбивает исключение.
0
|
|||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 12.06.2018, 20:14 | |||
|
Сразу поймете, почему выбивает.
0
|
|||
|
2 / 2 / 2
Регистрация: 18.07.2013
Сообщений: 124
|
|
| 13.06.2018, 08:44 [ТС] | |
|
В общем я бегло посмотрел документацию, сейчас внимательно прочитаю, не совсем понял, что подразумевается под синхронизацией в потоках
Добавлено через 6 часов 35 минут Добавил блокировку через отдельную функцию, как в документации, которая дает доступ только одному потоку, а чтение разрешает всем. Все работает как нужно без исключений, но к сожалению время возросло до 2 сек. Разбивать коллекцию на равные части для потоков не даст большей производительности, так как у нас бинарный поиск. В итоге данное приложение должно быть заточено под 12-и ядерный сервер, где довольно низкая производительность на ядро. Как я понимаю бинарный поиск на такой машине будет проигрывать некоторым другим методам сортировки и выборки, которые подойдут для многопоточности, но вот какие стоит использовать не знаю.
0
|
|
| 13.06.2018, 08:44 | |
|
Помогаю со студенческими работами здесь
7
Ошибка при чтении файла: Чтение после конца потока невозможно "Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла При чтении dll библиотеки в обычном(не бинарном) виде, чтение прерывается на NULL
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|