Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Как реализованы threads в STL C++

#cpp #многопоточность


Как реализованы threads в STL C++: Являются ли они оберткой вокруг стандартных системных
API: WinAPI, POSIX и др. или же организованы на более низком уровне? Спасибо.
    


Ответы

Ответ 1



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

Ответ 2



Вопросы реализации. std::thread в libstdc++ реализованы поверх абстракции gthread, которая, в свою очередь, может быть обёрнута вокруг чего нужно. На Linux - вокруг pthread. В общем, в исходника смотреть файлы gthr.h, gthr-default.h, gthr-posix.h или gthr-signle.h. На Windows libstdc++ не предоставляет поддержку тредов, точнее не предоставляет реализации уровня gthread для данной платформы. Поэтому проект MinGW предоставляет выбор, что будет использоваться как функционал потоков: Win32 потоки или winpthreads потоки. При использовании первого у вас не будет std::thread, потому как нет возможности сделать drop-in-place замену. Вторые, по сути, реализуют интерфейс pthread на виндовс, т.е. являются дополнительной обёрткой вокруг Win32 потоков, своеобразным адаптером. Про то, как осуществляется поддержка потоков в других реализациях STL (например того же MSVS), я рассказать не смогу.

Ответ 3



Обёртка. Читайте исходники. Всё станет на свои места.

Комментариев нет:

Отправить комментарий