|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
||||||
Семафоры. Синхронизация доступа к файлу08.07.2012, 18:33. Показов 7585. Ответов 20
Метки нет (Все метки)
здравствуйте господа программисты. Пишу HTTP сервер, задача такая: необходимо записывать в лог файл некую информацию о подключенных клиентах. лог файл один, а в секунду к серверу может быть сколь угодно много подключений, стало быть просто писать в этот файл не вариант. Сервер многопоточный, каждый клиент передается в новый поток с использованием пула потоков. Для записи в лог хочу использовать семафор, но как правильно реализовать его не знаю. Помогите пожалуйста, может кто сталкивался с такой проблемой.
Код сервера:
0
|
||||||
| 08.07.2012, 18:33 | |
|
Ответы с готовыми решениями:
20
Синхронизация доступа к общим данным |
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 08.07.2012, 20:07 | ||||||
|
Семафор - не лучший метод синхронизации в вашем случае.
Так как файловый поток является эксклюзивным ресурсом, здесь можно обойтись обычным замыканием через класс Monitor, он же блок lock
0
|
||||||
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|||||||||||
| 08.07.2012, 20:29 [ТС] | |||||||||||
|
сам прихожу к этому выводу, lock походу работает быстрее
Добавлено через 3 минуты
теперь как уничтожить этот поток??? он так и останится висеть в памяти??? так ведь и памяти может не хватить хд )))
0
|
|||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 08.07.2012, 23:01 | |
|
Поток схлапывается по заврешении метода.
В случае использования пула, потоки не схлапываются, а отдаются "на растерзание" следующему методу в очереди - повышает производительность. И да, семафор медленнее монитора (1 микросекунда против 100 наносекунд). В четверке, правда, добавили класс SemaphoreSlim, замыкание которого занимает в районе 250 наносекунд.
1
|
|
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|
| 09.07.2012, 08:49 [ТС] | |
|
на какой строчке уничтожается поток в приведенном примере??? покажите пожалуйста сам метод и строку на которой поток уже не существует. )
0
|
|
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|
| 09.07.2012, 10:57 [ТС] | |
|
если честно я вас не понял...
0
|
|
|
Master of Orion
|
||||||
| 09.07.2012, 11:03 | ||||||
|
Ilnur888,
0
|
||||||
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
||||||||||||||||
| 09.07.2012, 11:45 [ТС] | ||||||||||||||||
|
я хочу понять где именно завершает работу текущий поток потому что у меня проблемы с синхронизацией потоков при записи в файл. как я понял один процесс может обслуживать N потоков. который мы установили
Добавлено через 1 минуту извиняюсь синхронизировать процессы, в первом вопросе ) Добавлено через 38 минут подскажите пожалуйста где я допустил ошибку при синхронизации потоков при записи в файл??? метод реализующий запись в файл:
0
|
||||||||||||||||
|
Master of Orion
|
|
| 09.07.2012, 12:00 | |
|
Ilnur888, ну я так понимаю, просто происходит просто гонка за ресурс (файл). Просто в данном случае нужно настраивать работу критических секций, я так думаю.
http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F
0
|
|
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|||||||||||
| 09.07.2012, 12:11 [ТС] | |||||||||||
|
блин но код записи в файл находится в секции look это в свою очередь гарантирует то, что код в этой секции в данный момент времени может быть занят только одним потоком
как то же можно решить эту проблему ???
0
|
|||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||
| 09.07.2012, 13:48 | |||||||||
|
Если у вас вылетает исключение о занятом файле, то какой-то из потоков либо не синхронизирован, либо другой процесс пытается обратиться к этому же файлу. В случае двух процессов, обращающихся к одному и тому же файлу (клиент и сервер, например), вам нужно будет синхронизировать эти процессы - тут уже монитором не отделаться, придется использовать те же расшаренные семафоры или (лучший вариант в данном случае) использовать класс Mutex, который позволяет производить синхронизацию между процессами:
0
|
|||||||||
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|
| 10.07.2012, 14:15 [ТС] | |
|
Столкнулся с ещё одной проблемой (. Необходимо сделать кэш таблицы базы данных, и так чтобы этот кэш был общедоступным для каждого клиента, который запущен каждый в отдельном потоке. Если кто сталкивался с такой проблемой подскажите пожалуйста в каком направлении копать???
0
|
|
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
||||||||||||||||
| 10.07.2012, 17:05 [ТС] | ||||||||||||||||
|
столкнулся с такой проблемой, вобщем есть код:
при компиляции проблем не возникает, ошибка вылетает при заполнении "листа". в чем может быть проблема??? если быть точнее ошибка помоему вылетает тут. Добавлено через 59 секунд
0
|
||||||||||||||||
|
Master of Orion
|
||
| 10.07.2012, 17:06 | ||
У вас должен быть список однотипных элементов, а у вас получаются и строки и цифры. Попробуйте вместо ноля передавать пустую строку.
0
|
||
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
|
| 10.07.2012, 17:13 [ТС] | |
|
потому что тип данных в базе float
0
|
|
|
Master of Orion
|
|
| 10.07.2012, 17:15 | |
|
Ilnur888, а вы попробуйте. Если ошибка исчезнет, значит проблема в этом, если нет - надо думать. А уж как вы решать будете: изменять БД или обрабатывать как-то по-хитрому, сами решите. Сначала локализация проблемы, потом устранение. В данном случае нужно, чтобы правильно работал метод, а что он отдаст не те данные, которые может принять БД, не важно
0
|
|
|
2 / 2 / 0
Регистрация: 18.01.2012
Сообщений: 163
|
||||||||||||||||
| 10.07.2012, 17:22 [ТС] | ||||||||||||||||
|
я считываю данные из базы полный код:
ошибка точно вылетает в этой строчке
0
|
||||||||||||||||
|
Master of Orion
|
|||||||
| 10.07.2012, 18:00 | |||||||
|
Попробуйте во всей программе сделать цену тоже строковым параметром, то есть
![]() Добавлено через 7 минут Но что про меня сказать: я ваш код скопировал, у меня компилируется без проблем (правда я эти методы не вызываю, но ошибок компиляции нету). Только один warning:
0
|
|||||||
| 10.07.2012, 18:00 | |
|
Помогаю со студенческими работами здесь
20
Ошибка доступа к файлу Права доступа к файлу
Контроль доступа к файлу Excel Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|