В чем разница между nw_pthread_create и pthread_create?
Это конкретная реализация QNX для потоков. Я работаю над разработкой драйвера Wi-Fi для платформы QNX.
1 ответ
Отвечая на мой собственный вопрос - текст с сайта qnx.com - http://www.qnx.com/developers/docs/660/index.jsp?topic=%2Fcom.qnx.doc.core_networking.user_guide%2Ftopic%2Fnative_drvr_extra.html&resultof=%22nw_pthread_create%22%20
Создание темы
Существует несколько типов потоков, которые могут существовать в экземпляре io-pkt. Два типа потоков, созданных разработчиками драйверов или модулей сверху, являются пользовательскими потоками, которые отслеживаются (nw_pthread_create()) или не отслеживаются (pthread_create()) с помощью io-pkt. Независимо от того, как они созданы, все потоки POSIX, созданные в io-pkt, должны быть названы для более легкой отладки.
Неотслеживаемые темы -
Единственный раз, когда вы должны иметь дело с неотслеживаемыми потоками, это если вы используете библиотеку, которая создает потоки для сервисов, которые она предоставляет. Примером этого является библиотека стека USB (libusbdi), которая может создать поток для вызова пользовательских функций обратного вызова для обработки вставки и удаления устройства. Если ваш код создает поток напрямую, вы должны создать отслеживаемый поток, как описано ниже. Если вы вызываете библиотечные функции, которые создают потоки от вашего имени, вы должны управлять этими потоками в коде вашего модуля, потому что io-pkt не знает об их существовании. Как указано в разделе "Архитектура io-pkt", потоки, которые не отслеживаются, не могут выделять или освобождать mbuf или кластер и не могут вызывать функции, которые выполняют какие-либо манипуляции с псевдопоточностью контекста стека.
Отслеживаемые темы -
Если вы создаете поток в своем модуле io-pkt, вы всегда должны использовать nw_pthread_create (), а не pthread_create(). Функция nw_pthread_create () создает поток, который отслеживается io-pkt. Это позволяет потоку выделять и освобождать буферы памяти mbuf и кластера, а также предоставляет механизм синхронизации, который представляет собой функцию стабилизации, которая либо блокирует все потоки POSIX, отслеживаемые io-pkt, для исключительных операций, либо заставляет эти потоки завершать работу при завершении работы., Все отслеживаемые потоки POSIX должны зарегистрировать функцию обратного вызова в режиме ожидания (определено ниже). Если ваш поток не регистрирует функцию обратного вызова в состоянии покоя, io-pkt может оказаться в тупиковой ситуации.