Обновить

Комментарии 15

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

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

Ох уж этот AI контент.

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

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

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

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

В C тоже уже есть потоки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я – нет.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации