Как начать использовать многопоточное программирование?

Я новичок в переполнении стека. Я работаю над платформой Unix на C/С++. Зная базовое программирование в этом отношении, как я мог начать с multithreading?

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

Как я мог начать с многопоточности и какие лучшие методы/книги/книги/статьи доступны для захвата концепций как можно раньше?

Ответ 2

Обучение многопоточному программированию состоит из двух частей:

  • Как написать многопоточное приложение
  • Как использовать доступный API (pthread)

Обучение многопоточному программированию сложнее, хорошая статья, опубликованная в Linux Journal, которая поможет вам понять основные принципы.

Чтобы лучше понять pThreads, я предлагаю прочитать этот учебник - POSIX Threads Programming

Существует также хорошая книга О'рилли, которая называется Программирование PThreads

Ответ 3

Если вы начинаете многопоточность, моим советом будет первый обзор и лучшее понимание ввода-вывода в вашей системе. Понимать блокировку против неблокирующих операций ввода-вывода, сигнализации, асинхронных процедур, обратных вызовов и так далее. I/O, вероятно, является одной из основных причин добавления многопоточности в ваши программы. Благодаря этим знаниям вы можете взять книгу на темы pthreads или java или обдумать вокруг библиотеки Boost threads или другую библиотеку потоков для вашей любимой технологии.

Ответ 4

Я думаю, что статья Wikipedia Многопоточность дает вам быстрый обзор и, следуя внешним ссылкам, вы получите хороший обзор тема. После этого - или дополнительно - вы могли бы прочитать Tanenbaum Операционные системы: дизайн и реализация (кстати, великая книга). Но самое главное - на мой взгляд - взять это в руки. Так что просто скачайте образец приложения из... пусть Проект кода или любой другой веб-сайт, который вы найдете и поиграете с ним. Посмотрите, как приложение отличается, если вы используете блокировки или что происходит, если два потока пытаются получить доступ к одному и тому же ресурсу и как часто это произойдет, и т.д. Тем самым я думаю, что вы получите это довольно быстро. И это интересно оценивать и играть с помощью техник, которые новы для себя.

Ответ 5

Я нашел этот tutorial очень информативным и четко написанным. Надеюсь, что это будет полезно.

Ответ 6

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

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

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

Ответ 8

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

Вот книга " Основы многопоточного, параллельного и распределенного программирования", которая связана с обсуждаемой темой и которая я бы хотел рекомендовать. Самым значительным преимуществом этого является "относительно легко читаемый" стиль, но нет жесткой привязки к идеологии потоков POSIX (что является общей проблемой).

Ответ 10

так как UNIX почему бы не начать с процессов и сообщений IPC? то есть очереди сообщений, разделяемую память и мьютексы.

Ответ 11

Изучение различных библиотечных фреймворков и средств O/S - хороший способ понять низкоуровневый concurrency. Примеры, которые вы найдете там, могут заставить вас начать писать параллельный код за короткий промежуток времени.

После того, как вы отлаживаете свой собственный путь через несколько взаимоблокировок и проблемы с распространением памяти, вы обнаружите, что вам нужны некоторые инструменты для обсуждения и декомпозиции ваших проблем concurrency. Мне лично нравится Herb Sutter Столпы Concurrency в качестве отправной точки. Идея состоит в том, чтобы лучше понять, почему вам нужно concurrency. Вы ищете улучшенное время отклика, параллельный расчет, некоторую комбинацию причин?

Понимание "почему" приведет вас к лучшему "чему". Оттуда вы всегда можете разглядеть различные подходы низкого уровня: Активные объекты, объекты мониторинга, передача сообщений, и т.д.. Как вы сказали, в этой области есть что знать.