Что: 5eb8e4bc830f663fe8644439b6889b9447adfa64
Когда: 2022-11-14 10:05:23+03:00
Темы: bsd plan9
rfork как замена thread-ам https://www.unix.com/man-page/freebsd/2/rfork/ https://en.wikipedia.org/wiki/Fork_(system_call)#Rfork https://plan9.io/magic/man2html/2/fork В B системахSD есть rfork() вызов, изобретённый ещё в Plan 9. Один вызов для создания или отдельного fork()-like процесса или для thread-ов.
From: kmeaw Date: 2022-11-14 10:05:18Z В Linux тоже есть clone(2), но я не уверен, что про этот вызов можно сказать, что он создаёт thread - это только кусочек работы (хотя и самый важный). Стандартная библиотека C предоставляет интерфейс (FILE*) для работы с файлами, аллокатор памяти, примитивы синхронизации. Последние особенно важны в многопоточных приложениях. Многие стандартные библиотеки также помогают с раскруткой стека (для кооперации с отладчиком и печати stack trace), реализуют загрузчик динамических разделяемых библиотек, защищают от переполнения стека с помощью guard page. Эти механизмы завязаны на инициализацию памяти thread определённым образом, особенно thread local storage, в начале которого лежит thread control block. Неправильное заполнение этого блока (например из-за непосредственного использования clone вместо pthread_create) может привести к тому, что всё вроде бы работает, но программа зависает на чём-то вроде бы безобидном, типа assert() или взятии лока на точно свободном mutex. getpid()/thread_self() могут вернуть совсем не то, чего ожидаешь.
From: Sergey Matveev Date: 2022-11-16 09:13:55Z
Сгенерирован: SGBlog 0.34.0