2014-01-28 3 views
1

Мне нужно знать, как поток может отправить свой идентификатор в другой поток, прежде чем он перейдет в состояние ожидания. Я думал передать переменную с ее идентификатором, но я не знаю, как это сделать.Как отправить переменную/информацию между потоками

+0

Вы можете использовать трубу для записи и чтения (если я понимаю, что вы просите). –

ответ

1

Если это только один поток и его родительский элемент, вы можете использовать глобальную переменную, так как они разделяются между всеми потоками. Сделайте это volatile в случае, если вы ожидаете одновременного доступа.

EDIT: Я не уверен, что вы используете потоки POSIX в Linux, но, вероятно, у вас есть способ передать указатель (например, на struct) при создании потока. Он может содержать переменную для хранения своего идентификатора или указателя на функцию для вызова родительского потока. Я знаю, что вы можете сделать это с помощью потоков Windows.

+0

Если он разделяется между всеми потоками (и вы все равно сделаете его «volatile»), то почему ограничение «одного потока и его родителя?»? –

+0

Извините, я обновил вопрос после того, как вы ответили. Существует много потоков и один основной поток (планировщик). Мне нужно, чтобы последний узнал идентификатор других потоков, прежде чем они заснули. – Albert

+0

@RobertHarvey, если вы создаете несколько потоков, вы не можете использовать одну переменную, так как второй порожденный поток перезапишет ее. – Matthieu

1

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

+0

Когда вы говорите «свойство», вы действительно имеете в виду указатель на функцию или метод? (это язык C) –

+0

Да, спасибо за исправление. –

0

Темы разделяют память, поэтому вы можете выделить глобальную переменную и позволить ребенку писать на ней.

Чем отличается синхронизация (также информируют родителя о том, что значение было записано), у вас есть много вариантов: вы можете использовать семафор, можете отправить сигнал от потока обратно к его родительскому объекту, использовать переменную синхронизации, как описано here ,

Смежные вопросы