Я был повсюду в Интернете, и никто прямо не ответил на этот вопрос. Поэтому у меня есть структура в моем основном процессе, и мне нужно несколько потоков, чтобы изменить ее. Я знаю, что мне нужны мьютексы для защиты данных, но есть ли способ поделиться указателями, не передавая их как arg в pthread_create. Я понимаю, что потоки разделяют один и тот же адрес памяти и там, если я выделяю один, другой должен иметь к нему доступ. Но не передавая указатель, как потоки знают, что определенный указатель уже существует.Изменение структуры с несколькими потоками c программированием
ответ
Типичный ответ на ваш вопрос заключается в том, что вместо передачи указателя непосредственно на поток при вызове pthread_create
вместо этого вы передаете указатель на некоторую структуру более высокого уровня, которая служит в качестве вашей связи с потоком.
Например, скажем, что вы пишете сетевой сервер, который получает запросы от клиентов, а затем должен обрабатывать эти запросы. Нити, обрабатывающие запросы от клиентов, обычно передаются по адресу какой-то очереди. Когда поток получает запрос от клиента, он отправляет этот запрос в ожидаемую очередь. Потоки, обрабатывающие клиентские запросы, уже ожидают, что вещи будут помещены в эту очередь, и они получают информацию о запросе, который им требуется для обработки из очереди.
Итак, я делаю простой многопоточный банковский сервер. Я должен использовать мьютексы для управления потоками. Я считаю, что предлагаемое вами решение выше того, что я должен делать. Я просто хочу знать, могу ли я malloc указатель p я могу ссылаться на него в другом потоке? и если да, то как эти потоки разделяют эту информацию. – kevman
@kevman Фраза «malloc a pointer» не имеет никакого смысла. – immibis
@kevman Два потока обращаются к общей коллекции (например, к очереди ожидания), которая позволяет им общаться друг с другом. Указатель на эту коллекцию можно передать в поток в функции 'pthread_create'. –
- 1. C++ сервер с несколькими потоками
- 2. Понимание переменных с программированием Структуры C
- 3. Итерирование и изменение jtree с несколькими потоками
- 4. Запись в файл с несколькими потоками C#
- 5. Работа с несколькими потоками в Objective c
- 6. привязки свойств qml C++ с несколькими потоками
- 7. Ошибка аутентификации с несколькими потоками C#
- 8. Заполнение массива с несколькими потоками в C
- 9. Матричное умножение с несколькими потоками в C
- 10. synchronizedList с несколькими потоками
- 11. Сортировка с несколькими потоками
- 12. rand() с несколькими потоками
- 13. Tkinter с несколькими потоками
- 14. Диспетчер с несколькими потоками
- 15. CreateFileMapping с несколькими потоками
- 16. C# сокеты с несколькими клиентами (подход с несколькими потоками)
- 17. STDOUT порядок с несколькими потоками
- 18. Управление несколькими параллельными потоками
- 19. Число квадратов с несколькими потоками
- 20. Запуск ffmpeg с несколькими потоками
- 21. Параллельный фактор с несколькими потоками
- 22. Замерзание Tkinter с несколькими потоками
- 23. Работа с несколькими потоками Android
- 24. Синтаксис CoreData с несколькими потоками
- 25. клиентский сервер с несколькими потоками
- 26. Сортировка файла с несколькими потоками
- 27. Обработка сообщений с несколькими потоками
- 28. Приложение Qt с несколькими потоками
- 29. Java Swing с несколькими потоками
- 30. Связь между несколькими потоками
Чтобы разделить структуру без ее передачи, вам нужно сделать ее глобальной. – user3386109
Пожалуйста, объясните, почему вы не хотите передавать его как arg в 'pthread_create'. –
Полезный ответ на этот вопрос потребует гораздо большей информации. Было бы особенно полезно описать тип работы, которую вы хотите выполнить. В противном случае вы получите очень общий ответ. –