Pull to refresh

Comments 19

Ваша программа стартует используя MS CRT void main().

В этом случае MS настоятельно рекомендует использовать функцию _beginthread, так как она проводит дополнительную инициализацию создаваемого потока для корректной работы CRT функций.

Какое преимущество у WinApi перед стандартными функциями Си++?

Его можно использовать из чистого С )

Да, действительно. Только не особо переносимо.

Я сам начинал с винапи, включая многопоточку (тогда MSDN еще на компакт дисках поставлялся, интернет был дорогой и медленный). Но когда минимально освоил ООП - забыл как страшный сон. Хотя, как ни странно, где-то раз в 4 года приходится вспоминать :)

Это уже другие стандартные функции )

И насколько вижу, там, как и в плюсах, нет аналога CREATE_SUSPENDED - только реализовывать вручную с враппером и синхронизацией.

А какой практический пример у этого флага? Если процесс ещё понятно (вдруг, что-то пропатчить налету надо, до первой команды), то с потоком - не понятно.

Если нужно проинициализировать какие то структуры, когда идентификатор потока уже известен, а код ещё не побежал. Скажем, в живущих в адресном пространстве чужого процесса профилировщиках бывает нужно (перехватываем создание потоков, сначала создаём в suspended, делаем свою инициализацию и отпускаем).

Таким не занимался, но все равно мне кажется, что раз уж перехватываем создание потока, то можно и проинициализировать всё нужное самим.

Я бы делал так, берём тот же detours, заменяем CreateThread на свой, где вначале делается инициализация ну и ждем по какому нибудь мьютексу (который в винапи CreateEvent) сигнала к запуску оригинальной функции потока.

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

Естественно так можно (и с pthreads так и приходится делать), но с CREATE_SUSPENDED удобнее.

Уже на этапе определений путается многопоточность с параллельностью.

Да, я действительно признаю то, что нарочно добавил хаб «Параллельное программирование» в список хабов. Но ведь не все процессоры в мире имеют только одно ядро! Если процессор многоядерный, то несколько потоков действительно могут выполняться параллельно. Считайте, что хаб «Параллельное программирование» в списке хабов предназначен для тех, у кого многоядерные процессоры. А именно для многопоточного программирования просто не было подходящего хаба (по крайней мере, он может быть, но я его не нашёл). Кстати, так вы хотите продолжение статьи?

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

Смысл многопоточного программирования состоит в том, что программа разделяется на несколько частей, которые выполняются одновременно (однако, если в системе процессор с одним и только одним ядром, то это не совсем так).Эти части называются потоками. У потоков, как и у процессов, есть свои собственные код и данные, они также могут обращаться к общим ресурсам.

Кроме многопоточности, существует много других формализмов для записи параллельных программ, поэтому ссылаться только на параллелизм для определения многопоточности нельзя.

Кстати, так вы хотите продолжение статьи?

Я – нет.

Для начала прочти "C++ Concurrency in Action" Энтони Уильямса

Автор, что же вы удалили свою вторую статью? Или по ней стала более очевидна «глубина» ваших познаний в многопоточном программировании?

Ну, вот и всё. До свидания, мой читатель! Спасибо за то, что прочитал эту статью!

Как говорится, - не за что!

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

Весьма поразила описанная мощь теории многопоточного программирования. Хорошо, что автор напомнил, из чего состоят программы. Теперь хотя бы понятно почему «немного» времени процессор уделяет коду программы. Остальное время – что-то типа «черной материи»?

«Теоретическим открытием» для многих будет и то, что команды в программе выполняются друг за другом. Не совсем, правда, ясно как потоки «могут повысить быстродействие и производительность программы»? Но это, может, из-за непонимания различия между «быстродействием» и «производительностью» программ?

О реализации многопоточности. Даже не к чему придраться. А потому-то, ой, как «здорово получилось»?! Но если рассуждать здраво, то  потоки работают одновременно и одновременно «бьются» в консоль. И почему тогда не «каша» из символов/слов, а - просто «здорово»? Почему, как сказано далее, в этом случае «проблем нет», а другие случаи требуют синхронизации?

С нетерпением ждем разъяснений…

Ну да, как будто здесь люди сидят и ждут когда кто-то статью наберёт, откроет им глаза на такую неведомую сущность - эту МПП. Да это в каждой книге есть, а теперь и в любом ИИ

Sign up to leave a comment.

Articles