Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Ноября 09, 2024, 01:35:38 pm
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  TRANSAQ Connector  |  Topic: Работа с библиотекой из нескольких потоков « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Работа с библиотекой из нескольких потоков  (Прочитано 4118 раз)
quio
Newbie
*
Сообщений: 13


Просмотр профиля Email
« : Мая 05, 2017, 11:50:24 pm »

Подскажите, пожалуйста, при работе с библиотекой все функции критичны к наличию синхронизации их вызовов из разных потоков или же какие-то можно вызывать свободно, без блокировок?

Особенно интересует возможность вызова из нескольких потоков без блокировки функции FreeMemory (для разных участков памяти, естественно).
Записан
Сорвачев Сергей
Разработчики
Newbie
*****
Сообщений: 49


Просмотр профиля Email
« Ответ #1 : Мая 16, 2017, 11:00:28 am »

Библиотека TXmlConnector не рассчитана на работу в многопоточном режиме. Каждый вызов любой функции должен быть синхронизирован.
Записан
quio
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #2 : Мая 16, 2017, 01:35:00 pm »

Да, я в курсе, что не рассчитана. Поэтому и возник данный вопрос.

Даже если приложение является однопоточным, вызов функции FreeMemory выполняется из разных потоков: потока приложения для освобождения памяти, выделенной на результат вызова других функций, а также из callback функции - для освобождения памяти, передаваемой этой функции.

В документации сказано, что память в колбеке нужно освобождать самому явно. При этом о необходимости синхронизации вызовов FreeMemory не уточняется. В общем-то, логично, что функция освобождения памяти является потокобезопасной. Но хотелось бы получить подтверждение этого от разработчиков коннектора.
Записан
Сорвачев Сергей
Разработчики
Newbie
*****
Сообщений: 49


Просмотр профиля Email
« Ответ #3 : Мая 17, 2017, 10:33:29 am »

Ваш вопрос не очень понятен. Вы хотите услышать что при общей небезопасности коннектора относительно многопоточности функция FreeMemory потокобезопасна?  На данный момент да, как будет дальше - гарантий нет. Данную функцию зовет пользователь, при условии что он знает об ограничениях библиотеки, ничего не мешает ему синхронизировать вызовы функций и не звать их из нескольких потоков. Библиотека же не заставляет вас вызывать FreeMemory в колбэк-функции.
Записан
quio
Newbie
*
Сообщений: 13


Просмотр профиля Email
« Ответ #4 : Мая 17, 2017, 10:55:38 am »

Спасибо, я и хотел услышать, что FreeMemory таки потокобезопасна :)

Насчет будущего, весьма настаиваю на сохранении ее потокобезопасности. Все же чистка памяти после колбека должна быть обязанностью библиотеки. Но если она переложена на пользователя, этот момент должен быть учтен или, как минимум, широко рассмотрен. Вопрос о том, что она может являться непотокобезопасной возник кажется у меня одного - даже примеры использования библиотеки не используют синхронизацию при ее вызове. А ведь быть уверенным в том, что обращение к библиотеке и обратный вызов не совпадут по времени нельзя независимо от того, насколько простое приложение у пользователя.

Касательно того, что мешает ее синхронизировать, мешает одна простая вещь - производительность. И тем более глупо ее синхронизировать, если она уже синхронизирована внутри библиотки.
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  TRANSAQ Connector  |  Topic: Работа с библиотекой из нескольких потоков « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!