Создание потока (Не используя fork() и exec())
Модератор: Модераторы разделов
-
fleisch
- Сообщения: 40
- ОС: OpenSuSE Linux 11.1
Создание потока
Возник вопрос, можно ли просто вызвать функцию по ходу программы отдельным потоком и продолжить выполнение программы, не обращая внимание на работу той функции, не используя все эти fork() и exec() ??
-
Zeus
- Сообщения: 694
Re: Создание потока
Поток-то вроде как pthread_create создаёт.
А fork и exec создают новые процессы.
А fork и exec создают новые процессы.
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Создание потока
в Linux создание потока == вызов do_fork() со спец.флагами(думаю их не имеет смысла перечислять). так что хотите ли вы этого или нет, а fork() будет)))
кста, почему такое ограничение???
кста, почему такое ограничение???
-
AestheteAnimus
- Сообщения: 135
- ОС: FreeBSD 8.0-RELEASE amd64
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Создание потока
подробнее в исходниках ядра.
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Создание потока
строго говоря - do_fork() не является системным вызовом, это внутренняя функция ядра, недоступная напрямую через интерфейс системных вызовов.
fork обрабатывается функцией ядра sys_fork() в которой просто вызывается do_fork() с нужными флагами
системный вызов clone обрабатывается функцией ядра sys_clone() в которой просто вызывается do_fork() с нужными флагами
clone - более гибкий системный вызов по сравнению с fork.
Но о наличии do_fork() прикладной программист думать и догадываться не должен (это ничем не стандартизированные тонкости реализации нитей в линукс), кроме того, прикладной программист для создания нити не должен даже обращаться к clone. Если мы хотим создать мобильный код - надо использовать pthread_create
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
AestheteAnimus
- Сообщения: 135
- ОС: FreeBSD 8.0-RELEASE amd64
Re: Создание потока
Такая релизация потоков, через do_fork, - чисто линуксовая? Или же это свойственно для всех nix систем (меня прежде всего интересует FreeBSD)?
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Создание потока
fleisch, действительно, откуда такое ограничение? Если просто лень изучать man 2 fork и man 3 exec - ну, изучите man 3 system
Пример: system("/path/to/program &");
Я так понимаю, под словом 'поток' подразумевается просто асинхронное выполнение, а не thread.
Конкретно название функции и конкретный механизм - скорее всего, чисто линуксовая специфика (за подробностями, действительно, см. исходники). Но принцип - что потоки мало отличаются от процессов - родовая черта всех юниксов (исключение, афаик - solaris).
Я так понимаю, под словом 'поток' подразумевается просто асинхронное выполнение, а не thread.
Конкретно название функции и конкретный механизм - скорее всего, чисто линуксовая специфика (за подробностями, действительно, см. исходники). Но принцип - что потоки мало отличаются от процессов - родовая черта всех юниксов (исключение, афаик - solaris).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru