LINUX.ORG.RU

Библиотека для многопоточности

 ,


0

2

Нужна какая-то кроссплатформенная либа на С (именно C, C++ не годится) для многопоточности. Основные требования: потоки, средства синхронизации потоков (мьютексы, условные переменные, rw-locks). Это все должно работать на достаточно старом hp-ux, solaris и, конечно же, современные ОС типа Windows (visual studio и mingw), Linux, macOS. Если будут еще и сокеты кроссплатформенные - то вообще отлично.

В идеале либа должна быть достаточно легковесной, есть перспективы запускать сабж на embedded (если и будет, то, скорее всего, QNX). Должна быть надежной, возможно использование в mission-critical. Из того, что я нашел:

  • https://github.com/GNOME/glib - вроде подходит (потоки и сокеты), но про hp-ux тишина. Пугает размер самой либы, так как слишком сильно нафарширована.
  • https://github.com/saprykin/plibsys - вроде требованиям соответствует (потоки и сокеты), но первый раз слышу, поиск про это мало что дает.

Больше толком ничего не нашел. Что еще можно посмотреть-пощупать?

★★★★

Ответ на: комментарий от MuZHiK-2

Я не хочу сложностей на винде.

https://sourceware.org/pthreads-win32/ - использовал для портирования одной штуки с линукса много лет назад, не помню чтобы возникли какие-то проблемы.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Чем не устраивает pthreads (posix threads, он есть в mingw64) или многопоточность из стандартной библиотеки C++11?

grem ★★★★★
()
Ответ на: комментарий от MuZHiK-2

pthreads для винды аж в нескольких вариантах есть

Harald ★★★★★
()
Ответ на: комментарий от Deleted

Вроде ничего выглядит. Но если брать pthreads, то мне придется это сперва в CMake завернуть (думаю, несложно), плюс надо тогда свою лапшу под Unix, потому как pthreads на разных системах надо компилить с разными параметрами, потом линковать по разному. Если посмотреть в код конфигурации той же GLib, то это можно увидеть. Хотелось бы не заниматься этим.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от tnodir

Оно дружит с не-gcc компиляторами? Вообще, функционал подходит, даже сокеты есть. Правда выглядит жирновато.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от MuZHiK-2

не, это имплиментация стандарта С11, там нет rwlock. Но его можно самому на примитивах построить.

anonymous
()
Ответ на: комментарий от anonymous

Я сам могу тогда уж и либу написать, хочется готового.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от anonymous

Посмотрел их код. Они почему-то не используют для rwlock и условной переменной на Винде нативное API, что в Висте появилось.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от MuZHiK-2

Поправь и закоммить...будь мужиком!

anonymous
()

Пиши обертку. Над следующими вещами:

1) pthreads для всего, кроме винды 2) WinAPI для винды 3) Опционально, для UWP/etc

Дело в том, что pthreads, сколько я не смотрел реализаций, на винде реализованы через жопу. Например, несмотря на то, что в винде нативные Conditional Variables есть начиная с Vista, в том же Mingw64 он сделаны хер пойми как через очереди и эвенты.

lovesan ★★
()

кроссплатформенная либа

В идеале либа должна быть достаточно легковесной

Чтобы что-то кроссплатформенное было и легковесным одновременно. Причём ещё и настолько, чтобы

есть перспективы запускать сабж на embedded

Просто чудо проектирования.

А по сабжу - я за pthreads.

gag ★★★★★
()
Ответ на: комментарий от lovesan

Дело в том, что pthreads, сколько я не смотрел реализаций, на винде реализованы через жопу. Например, несмотря на то, что в винде нативные Conditional Variables есть начиная с Vista, в том же Mingw64 он сделаны хер пойми как через очереди и эвенты.

Вот! Именно это и пугает. Страшновато тащить эти велосипеды. Я надеялся, что кто-то уже сделал это.

1) pthreads для всего, кроме винды 2) WinAPI для винды 3) Опционально, для UWP/etc

В крайнем случае - да, придется.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от gag

Просто чудо проектирования.

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

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от MuZHiK-2

Вот! Именно это и пугает. Страшновато тащить эти велосипеды. Я надеялся, что кто-то уже сделал это.

Так если без XP, какая же это кроссплатформенность?

gag ★★★★★
()
Ответ на: комментарий от MuZHiK-2

В крайнем случае - да, придется.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от MuZHiK-2

Не-не, про «чудо» я имел ввиду библиотеку, которая могла бы одновременно удовлетворить всем требованиям.

gag ★★★★★
()
Ответ на: комментарий от gag

Вторая из приведенных реализаций точно кривая.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от gag

Так если без XP, какая же это кроссплатформенность?

В рантайме можно проверить, есть ли нужная функция. В найденых мною либах это таки сделано.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

Значит pthreads точно отпадают. Понятно, что можно запилить самому, но объем возьни не радует: начиная от XP и заканчивая TLS всякими. Пока есть 2 кандидата, может кто еще знает что.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от gag

Не-не, про «чудо» я имел ввиду библиотеку, которая могла бы одновременно удовлетворить всем требованиям.

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

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от anonymous

Про Apache Apr уже, вроде, писали.

В апаче условные переменные и rwlock тоже через задницу сделаны.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от Iron_Bug

Если человек пытается что-то кроссплатформенное писать, то либо он сбредил, либо выбрал не ту работу.

Нафиг вообще эти мастдаи поддерживать? Кому в здравом уме может прийти в голову что-то разрабатывать (кроме игр) для этого говна?

anonymous
()
Ответ на: комментарий от MuZHiK-2

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

а я хотел QThread советовать, ибо ну что значит «жирное», сколько там этот несчастный Qt Core кушает - чуток на диске, и немного оперативки, впрочем ладно, я бы весь софт писал на Qt от десктопа и сервера до embedded, до разумных пределов конечно

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Как бы я сразу написал, что:

Нужна какая-то кроссплатформенная либа на С (именно C, C++ не годится)

Именно по этой причине Qt сразу же отпал.

MuZHiK-2 ★★★★
() автор топика

В общем, дела не огонь. Первая (GLib) переходит в последний месяц с Autotools на какую-то самопальную систему сборки, которая написана на пистоне (OMG!). Тащить в проект пистон ради С-шной либы это изврат какой-то. Вторая (plibsys) собралась, тесты проходит. Но использовать ее все равно стремновато - про нее нигде ни слухом, ни духом. Боюсь потом нарваться на какой-нибудь ахтунг. Так что объявление о поиске в силе.

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от MuZHiK-2

про нее нигде ни слухом, ни духом.

По крайней мере неделю назад автор оценил её статус настолько стабильным, что решился подать заявку в Debian: ITP: libplibsys0 — Highly portable C system library. Вот бы ещё хоть какую-нибудь историю успеха.

gag ★★★★★
()
Ответ на: комментарий от gag

Вот бы ещё хоть какую-нибудь историю успеха.

Я про тоже. Потому что про GLib я знаю как оно и что там, но из-за своей толстоты не пролазиет. ITP в Дебиане не показатель совсем, там полторы тысячи таких ITP висят годами без пакетов.

MuZHiK-2 ★★★★
() автор топика

в mingw есть поддержка pthreads. Не знаю, есть ли реализация для VS, если есть безглючная - то это отличный вариант.

mittorn ★★★★★
()
Ответ на: комментарий от anonymous

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

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от MuZHiK-2

это УГ со сборкой уже немало распространилось. выпиливаю его везде при сборке пакетов, чтобы не ставить пистон. выпиливается на раз. на самом деле, пистон там не нужен чуть более, чем полностью. это просто сахар для тех, кто ниасилил написание makefile'ов. и он тупо их сам генерит. но зараза распространяется. это надо пресекать, чтобы с нормальными пакетами не тащились тонны питонячьего говна.

Iron_Bug ★★★★★
()
Ответ на: комментарий от anonymous

libuv

Я правильно понимаю, что для сборки этого чуда под виндой нужен пистон?

MuZHiK-2 ★★★★
() автор топика
Ответ на: комментарий от tnodir

В общем, решил остановиться пока на plibsys. По крайней мере, на нужных мне платформах оно работает (сделали простые тесты пока). Велик писать очень не хочется, тупо нет времени.

libuv в первом приближении вроде неплох был, но на Solaris не завелось, на hpux уже тестировать не стал.

MuZHiK-2 ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.