Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Функции GetMem/FreeMem в Lazarus Linux потоконезависимы?


костыль   (28.07.17 08:56

Являются ли функции GetMem/FreeMem в Lazarus под Linux потоконезависимыми?
Или их нужно обернуть в мьютекс?


dmk ©   (28.07.17 10:05[1]

А зачем их в поток вставлять? Инициализируйте до запуска потоков.


костыль   (28.07.17 10:43[2]

Сервер будет работать на слабой машине. Не каждому клиенту может потребоваться много памяти. Какому именно клиенту память потребуется заранее не известно. Если всем клиентам заранее выделить память с запасом, то ресурсов сервера не хватит.


Игорь Шевченко ©   (28.07.17 13:50[3]

Являются


костыль   (28.07.17 17:19[4]

Спасибо за конкретный ответ.

Но могу ли я поверить на слово? Может есть какие пруфы?

Хочу предупредить, прога-сервер будет работать как служба(или как там в Линуксе это называется, демон или как-то так), многопоточность в целом никак специально не инициируется, стандартные классы для работы с потоками не используются, модули типа cthreads и т.п. не включены, пользуюсь только низкоуровневыми pthread_create ..


rrrrr ©   (28.07.17 17:43[5]

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


костыль   (28.07.17 17:49[6]

У меня в основном статические переменные, все динамические переменные и фиксированные куски памяти у меня заранее выделяются в одном потоке.


костыль   (28.07.17 18:09[7]

> rrrrr
> ...
> а вот гетмемная - это уже надо запариться на тему

Так я собственно поэтому и спрашиваю.
Т.е. если многопоточность в целом никаким специальным способом не инициировать, то возможны ли проблемы с динамическим выделением памяти?

.. переменные у меня в основном локальные статик и внутри функций.


костыль   (28.07.17 18:32[8]

"инициировать" хм, имелось в виду "инициализировать"


Pavia ©   (30.07.17 16:32[9]

Что такое потоконезависимость?


> Сервер будет работать на слабой машине. Не каждому клиенту
> может потребоваться много памяти. Какому именно клиенту
> память потребуется заранее не известно. Если всем клиентам
> заранее выделить память с запасом, то ресурсов сервера не
> хватит.

Неправильная архитектура.

> Игорь Шевченко ©   (28.07.17 13:50) [3]

Смешно. Правда смешно. ;)


Юрий Зотов ©   (30.07.17 17:11[10]

> Pavia ©   (30.07.17 16:32) [9]
> Неправильная архитектура.


А что не так?


Pavia ©   (30.07.17 18:10[11]


> А что не так?

А что так?
Что хорошего в анархии так? Децентрализованная система управления чревата следующими проблемами:
- дефрагментация памяти(как следствие исчерпания памяти);
- гонка процессоров(дедлоки);
- проблема обедающих философов(проблемы синхронизации).

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

Бывает некоторый процент задач где нельзя обойтись. Но в большинстве случаев это кривая архитектура. Когда героически решают эти проблемы.

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


Юрий Зотов ©   (30.07.17 20:22[12]

> Pavia ©   (30.07.17 18:10) [11]
> Возьмите централизованную модель управления ...
> ... и эти проблемы уходят сами собой.


Да. Но почему Вы решили, что в сабже ДЕцентрализованная модель? Насколько я понял, она именно централизованная.

1. Есть главный поток, на вход которого поступают некие задачи

2. Получив задачу, главный поток порождает поток задачи и отдает ему поступившую задачу на выполнение, а сам ждет следующую задачу.

3. Поток задачи сам управляет своими ресурсами, а по завершению очищает их и умирает сам.

По-моему, там именно такая схема, а ТС спрашивает лишь о том, надо ли синхронизировать выделение памяти в потоках задач, или оно уже и без того потокобезопасное?

> сабж

Я бы синхронизировал. Для гарантии. А еще подумал бы о пуле потоков.


костыль   (31.07.17 08:39[13]


> Pavia ©   (30.07.17 16:32) [9]
> Что такое потоконезависимость?


Как я понял, правильный устоявшийся термин - "потокобезопасность", спасибо что поправили. Надеюсь все поняли о чем речь.


> Юрий Зотов ©   (30.07.17 20:22) [12]


Да, примерно так все и есть, Вы прям телепат. Последую Вашему совету, благо конкретно в моем случае синхронизация на производительность не повлияет, и это всего пару строчек дописать.


> Игорь Шевченко ©   (28.07.17 13:50) [3]


При всем уважении.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо