#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
Обёртка. Читайте исходники. Всё станет на свои места.
Комментариев нет:
Отправить комментарий