Подтвердить что ты не робот

Как работает pthread?

Я опытен в многопоточном программировании на Java и С#, и я начинаю изучать, как это сделать в C на Linux. Я "вырос" в смысле программирования в Linux, поэтому я понимаю его философию памяти, обработку процессов и т.д. На высоком уровне.

Мой вопрос не в том, как делать потоки. Я хотел бы знать, как это делает pthread. Развертывает ли он процесс и как-то обрабатывает вашу связь между процессами? Или просто управляет адресным пространством? Я хочу подробные детали: Googling только подготовил "как это сделать", а не "как это работает".

4b9b3361

Ответ 1

В Linux обе fork() и ptrheads используют один и тот же syscall clone(), который создает новый процесс. Разница между ними - это просто параметры, которые они отправляют на clone(), при создании нового потока он просто заставляет оба процесса использовать одни и те же сопоставления памяти.

Помните, что в Linux (и других современных Unix) памяти, стеки, состояние процессора, PID и другие являются ортогональными функциями процесса; поэтому вы можете создать новый процесс только с новым стеком и состоянием процесса (делить все остальное) и называть его потоком.

Ответ 2

Детали, вероятно, слишком сложны, чтобы действительно войти (без публикации ссылки на исходный код glibc), но я могу дать вам лучшие вещи для поиска:

  • Pthread использует sys_clone() для создания новых потоков, которые ядро ​​видит в качестве новой задачи, которая позволяет совместно использовать многие структуры данных с другими потоками.

  • Чтобы выполнить синхронизацию, pthread сильно зависит от futexes в ядре.

Ответ 3

Здесь является источником pthread.c. Это может помочь вам ответить на ваш вопрос.