Конференция "FreePascal" » Функции GetMem/FreeMem в Lazarus Linux потоконезависимы?
 
  • костыль (28.07.17 08:56) [0]
    Являются ли функции 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]


    При всем уважении.
 
Конференция "FreePascal" » Функции GetMem/FreeMem в Lazarus Linux потоконезависимы?
Есть новые Нет новых   [118232   +39][b:0][p:0.001]