LINUX.ORG.RU

Реализация потоков в Linux


0

0

Здравствуйте, уважаемое Linux-сообщество!!!

Начал изучать программирование под Linux. До настоящего времени программировал под Windows. Сейчас изучаю материал по разработке многопоточных приложений. Но как-то все туманно по этой теме. Как я понял, есть стандарт на API поддержки потоков – POSIX 1996. Затем наткнулся на инфу о библиотеках реализации неких пользовательских потоков. Затем слышал, что реализация поддержки многопоточности под Linux несколько кривовато, подглючивают проги, реализованные с использованием многопоточности.

Подскажите, на что ориентироваться в этом вопросе??? Помогите пожалуйста дополнительной инфой и рекомендациями! Хотелось бы иметь возможность работы с потоками как это реализовано в Windows, т.е. потоки работают в рамках одного процесса (используют одно адресное пространство), потоки диспетчируются ядром, какие-либо системные вызовы в одном потоке никак не влияют на другие потоки, потоки располагают достаточными средствами синхронизации (хотя бы какие-нибудь критические секции) и т.д.

Также для меня важно использовать наиболее надежный вариант, чтобы проги ни дай бог не повели себя неадекватно. Работать собираюсь под дистрами RedHat и CentOS.


Найди книгу "Программирование для Linux. Профессиональный подход" ( "Advanced Linux Programming") там многое описано для начанющего. Проги криво рабоатают только криво написанные :), а так средства синхронизации потоков конечено есть.

stalcker
()

> Подскажите, на что ориентироваться в этом вопросе???

На стандарт POSIX threads, они же pthreads.

> неких пользовательских потоков.

Есть и такие, но это всё не "штатные" библиотеки. "Штатных" было 2 - LinuxThreads, была в использовании с середины 90-х до 2003-2004 года, и NPTL, которая в использовании сейчас. Они полностью совместимы, обе реализуют POSIX, но NPTL эффективнее, и лучше реализует стандарт.

> отелось бы иметь возможность работы с потоками как это реализовано в Windows, т.е. ...

Всё есть.

> достаточными средствами синхронизации (хотя бы какие-нибудь критические секции)

:D

man pthread.h, там перечислены все функции, имеющие отношение к нитям (не называй нити потоками, ОК?), потом man нужная_функция. Команда info libc "POSIX threads" тоже полезна :) Вот неплохая ссылка: http://yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Если ты уже умеешь пользоваться нитями в Windows, man'а тебе может вполне хватить, Повнимательнее присмотрись к condition variables - в Windows такое делается по-другому. http://www-128.ibm.com/developerworks/linux/library/l-posix3/ (это 3-я часть длинной статьи о POSIX threads).

В старой LinuxThreads было несколько файлов с отличными примерами использования нитевых примитивов - краткими и по сути.

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

> Маленький вопросик: где можно скачивать последние версии NPTL??

:D пацтулам

Извини

Ее не надо "скачивать", и зачем тебе _именно последняя_ версия?. Если у тебя более-менее современный Linux (год выхода - 2004 и позже), то у тебя есть NPTL в составе glibc. Если нет - не беда, в составе glibc всё равно есть POSIX threads.

Если же тебе _и в самом деле_ нужны последние версии NPTL, то ищи glibc CVS. Но я тебе _крайне_ не советую это делать - апгрейд glibc дело нетривиальное.

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

> "Штатных" было 2 - LinuxThreads, была в использовании с середины 90-
> до 2003-2004 года, и NPTL, которая в использовании сейчас. Они
> полностью совместимы, обе реализуют POSIX, но NPTL эффективнее, и
> лучше реализует стандарт.

Увы, LinuxThreads в некоторых случаях не соответствует POSIX и
соответственно переход с LinuxThreads на NPTL далеко не всегда
простой.

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

> LinuxThreads в некоторых случаях не соответствует POSIX и соответственно переход с LinuxThreads на NPTL далеко не всегда простой.

Ну, в моем случае всё было просто. Несоответствия LinuxThreads были в основном (или только?) в обработке сигналов, а во всех учебниках советуется не связываться с сигналами в нитях. Да и проблемы это вызывало у тех, кто портирует _на_ LinuxThreads.

Или ты говоришь о собственном опыте? Тогда интересно было бы послушать.

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

Ну например, "дядюшка не может делать wait() на племянника" :)

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