LINUX.ORG.RU

Как принудительно переключиться между нитями


0

0

Такой вопрос. Имеются несколько нитей, возможно ли и если да то как сделать следующие действия: 1. Передать управление на определенную из них 2. Просто передать управление, поскольку работы для данной нити больше нет

anonymous

> Просто передать управление, поскольку работы для данной нити больше нет

pthread_yield()

> Передать управление на определенную из них

Останавливать эту самую "определенную" на каком-либо семафоре (тип семафора не критичен) и подавать через этот семафор сигнал для пробуждения спящей красавицы :-)

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

> > Просто передать управление, поскольку работы для данной нити больше нет

> pthread_yield()

Из какой жопы ты вытащил это thread_yield() ? Может ты имел ввиду ched_yield()?

anonymous
()

>1. Передать управление на определенную из них

Помнится, в оффтопе была такая единица scheduling, как fiber (ее можно сэмулировать в Linux через setjmp/longjmp). Для обычных нитей переключиться на определенную нельзя.

>2. Просто передать управление, поскольку работы для данной нити больше нет

Если работы для нити вообще нет, то нужно завершить свою работу.
Если нить должна подождать какого-то события, то нужно воспользоваться соответствующим синхронизирующим примитивом.

Murr ★★
()
Ответ на: комментарий от anonymous

> Из какой жопы ты вытащил это thread_yield()

Не сделать ли тебе man sched_yield и info libc, пионер?

Про sched_yield явно говорится: A process can relinquish the processor voluntarily without blocking by calling sched_yield.

Разницу между нитями и процессами понимаешь? Какой pid имеют треды для ядер линейки 2.6? А для 2.4? А для патченых 2.4 (например из FC1)? Заодно можешь почить include'ы, тоже полезное занятие.

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.