Мне нужно знать, как поток может отправить свой идентификатор в другой поток, прежде чем он перейдет в состояние ожидания. Я думал передать переменную с ее идентификатором, но я не знаю, как это сделать.Как отправить переменную/информацию между потоками
ответ
Если это только один поток и его родительский элемент, вы можете использовать глобальную переменную, так как они разделяются между всеми потоками. Сделайте это volatile
в случае, если вы ожидаете одновременного доступа.
EDIT: Я не уверен, что вы используете потоки POSIX в Linux, но, вероятно, у вас есть способ передать указатель (например, на struct
) при создании потока. Он может содержать переменную для хранения своего идентификатора или указателя на функцию для вызова родительского потока. Я знаю, что вы можете сделать это с помощью потоков Windows.
Если он разделяется между всеми потоками (и вы все равно сделаете его «volatile»), то почему ограничение «одного потока и его родителя?»? –
Извините, я обновил вопрос после того, как вы ответили. Существует много потоков и один основной поток (планировщик). Мне нужно, чтобы последний узнал идентификатор других потоков, прежде чем они заснули. – Albert
@RobertHarvey, если вы создаете несколько потоков, вы не можете использовать одну переменную, так как второй порожденный поток перезапишет ее. – Matthieu
Вы можете создать указатель в потоке, который указывает на функцию в родительском (по ссылке). К тому моменту, когда он переходит в состояние ожидания, он может просто использовать этот указатель для запуска чего-то своему родительскому элементу.
Когда вы говорите «свойство», вы действительно имеете в виду указатель на функцию или метод? (это язык C) –
Да, спасибо за исправление. –
Темы разделяют память, поэтому вы можете выделить глобальную переменную и позволить ребенку писать на ней.
Чем отличается синхронизация (также информируют родителя о том, что значение было записано), у вас есть много вариантов: вы можете использовать семафор, можете отправить сигнал от потока обратно к его родительскому объекту, использовать переменную синхронизации, как описано here ,
- 1. Как общаться между двумя потоками
- 2. Как общаться между потоками
- 3. Использование SendMessageToDescendants между потоками
- 4. Отличие между потоками Java и потоками ОС?
- 5. Как передать значения между потоками?
- 6. Как регистры разделяются между потоками?
- 7. Как обмениваться объектами между потоками
- 8. Как передать GEOMETRYCOLLECTION между потоками
- 9. Как переключаться между потоками posix?
- 10. Как делиться данными между потоками?
- 11. Разница между несинхронизированными потоками и синхронизированными потоками
- 12. Реализация связи между потоками C#
- 13. Разница между потоками SwingUtilities и потоками AWT.EventQueue
- 14. Связь между рабочими потоками
- 15. Манипулировать переключение между потоками
- 16. связь между потоками
- 17. потоковая связь между потоками
- 18. Связь между потоками
- 19. Выходной поток между потоками
- 20. Сигнал между потоками
- 21. Взаимодействие между потоками Java
- 22. Связь между потоками java
- 23. Synchronized ArrayList между потоками
- 24. Обмен объектами между потоками
- 25. Нахождение минимума между потоками
- 26. Синхронизация стеков между потоками
- 27. Делиться информацией между потоками
- 28. Доля секундомера между потоками
- 29. Связь между двумя потоками
- 30. Проблемы связи между потоками
Вы можете использовать трубу для записи и чтения (если я понимаю, что вы просите). –