Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Делала многопоточную прогу давно под Windows, Visual Studio, MFC там все просто: передаем потоку при создании некую информацию, вместе с тем головной поток может в любой момент модифицировать эту информацию скажем флаг bKill. А как организовать обмен данными между потоками в Linux под gcc, pthread_t? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:28 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.Pвместе с тем головной поток может в любой момент модифицировать эту информацию скажем флаг bKill. А как организовать обмен данными между потоками в Linux под gcc, pthread_t? Для булевой переменной - точно так же. Только метку volatile не забудьте. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:44 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо, а для остальных типов переменных? как скажем передать из потока в поток данные структуры struct sockaddr_in ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 14:02 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.Pкак скажем передать из потока в поток данные структуры struct sockaddr_in ? Точно так же: через параметр функции потока. Откройте уже для себя man. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 14:10 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.Pпередаем потоку при создании некую информацию, вместе с тем головной поток может в любой момент модифицировать эту информацию скажем флаг bKill. А как организовать обмен данными между потоками в Linux под gcc, pthread_t? Между потоками нигде не нужно организовывать обмен данными, все данные программы доступны во всех её потоках. В этом и отличие потоков от процессов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 18:04 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMari.Pвместе с тем головной поток может в любой момент модифицировать эту информацию скажем флаг bKill. А как организовать обмен данными между потоками в Linux под gcc, pthread_t? Для булевой переменной - точно так же. Только метку volatile не забудьте. Пора уже прекратить есть руками с начала C++11. Там есть std::atomic_flag/std::atomic_bool для таких целей. atomic_flag гарантированно всегда атомарен. Раз уж приложение на C++, то пора бы забивать на pthread и пользоваться стандартной библиотекой. Обмен между потоками можно организовать несколькими путями: 1. Через комбинацию std::promise/std::future; 2. Через потокобезопасные типы/атомики; 3. Разделяемые данные, защищённые мьютексами в комбинации с condition_variable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 11:09 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
NekZРаз уж приложение на C++, то пора бы забивать на pthread и пользоваться стандартной библиотекой. Не всем нравятся прыжки в ширину и тонны говнокода. А некоторые заботятся и о производительности. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 12:48 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе всем нравятся прыжки в ширину и тонны говнокода. А некоторые заботятся и о производительности . Я считаю, что пока проект не разросся в несколько десятков тысяч строк, ещё не поздно отрефакторить под современные реалии, чтобы не продолжать накидывать архаичный код. А причём тут производительность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 13:02 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
NekZА причём тут производительность? Вопрос на засыпку: мутексы в стандартной библиотеке С++ реализованы через мутексы, футексы или критические секции? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 13:48 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВопрос на засыпку: мутексы в стандартной библиотеке С++ реализованы через мутексы, футексы или критические секции? Вопрос невалидный, реализация ОС-специфичных потрохов полностью implementation-defined. В gcc, ЕМНИМ используется pthread под капотом. И что с того? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 14:10 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
NekZИ что с того? То-то и оно, что ты не знаешь что там под капотом, а потому не можешь определить почему программа жрёт 100% процессора, но при этом тормозит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 14:17 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТо-то и оно, что ты не знаешь что там под капотом, а потому не можешь определить почему программа жрёт 100% процессора , но при этом тормозит. Наверное, live lock ;-) А если по делу, то какой-то мутный аргумент против стандартной библиотеки. То же самое можно сказать про любые плюсовые обвязки threading либ (boost, Qt). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 14:37 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
NekZТо же самое можно сказать про любые плюсовые обвязки threading либ (boost, Qt). Да. И именно поэтому лично я их не использую и не планирую использовать даже в новых проектах. Не хочу ради призрачной цели "один код для всех платформ" тренироваться в беге на месте с препятствиями. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 15:02 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа. И именно поэтому лично я их не использую и не планирую использовать даже в новых проектах. Не хочу ради призрачной цели "один код для всех платформ" тренироваться в беге на месте с препятствиями. Как ты понимаешь, у такого подхода свои минусы, и далеко не всё сообщество C++ готово с ними мириться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 15:36 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNekZТо же самое можно сказать про любые плюсовые обвязки threading либ (boost, Qt). Да. И именно поэтому лично я их не использую и не планирую использовать даже в новых проектах. Не хочу ради призрачной цели "один код для всех платформ" тренироваться в беге на месте с препятствиями. А что внутри pthread? А что в ядре ОС? И что там компилятор нагенерит? Нет, только ассемблер, только bare metal, только хардкор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 17:22 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
BarloneА что внутри pthread? А что в ядре ОС? В них, конечно, тоже нельзя быть уверенным, но они предоставляют гораздо больше инструментов, чем стандартный С++, а значит есть что сравнить и выбрать наиболее подходящий к задаче. Выше я уже упоминал мутексы, футексы и критические секции. А в другом топике интересовался чем в стандартном С++ можно заменить WaitForMultipleObject(). Ничего лучше бесконечного цикла с опросом состояния всех объектов предложено не было. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 17:47 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovтопике интересовался чем в стандартном С++ можно заменить WaitForMultipleObject(). Ничего лучше бесконечного цикла с опросом состояния всех объектов предложено не было. std::condition_variable? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 18:11 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNekZРаз уж приложение на C++, то пора бы забивать на pthread и пользоваться стандартной библиотекой. Не всем нравятся прыжки в ширину и тонны говнокода. А некоторые заботятся и о производительности. Если есть конкретные проблемы с производительностью std::, выкладывай (ну кроме потоков, и так известно). Собственно, комитет о факторе производительности не забывает. А велосипеды зачастую небыстрые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 18:37 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNekZРаз уж приложение на C++, то пора бы забивать на pthread и пользоваться стандартной библиотекой. Не всем нравятся прыжки в ширину и тонны говнокода. А некоторые заботятся и о производительности. там все более чем ок с производительностью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:05 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov топике интересовался чем в стандартном С++ можно заменить WaitForMultipleObject(). Ничего лучше бесконечного цикла с опросом состояния всех объектов предложено не было. там как бы немного другая модель вычислений, там WaitForMultipleObject вообще не нужен. Если тебе по-другому никак, то да, тебе придется написать непереносимую программу Но зачем писать ее каждый раз - не понятно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 06:14 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.PДелала... Код: plaintext 1. 2. 3. 4. 5. 6. 7. Офф/2: Оно не рабочее. Или по другому - в тепличных условиях работать будет. Случайная нагрузка на ось и код поплывёт... ЗЫ Или по другому.... Т.к. поток может никогда не начаться, то нафига Вы запускаете такой поток, работоспособность которого вам пофигу???? с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 13:47 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Да, спасибо большое, man открыла, все получилось, еще понятнее, чем под Windows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 08:34 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Уважаемые профессионалы, подскажите пожалуйста: Linux Debian, gcc, конструкция проги такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вопрос - перед завершением головного потока надо написать pthread_join(thread, NULL);? или дочерние потоки завершатся вместе с основным? (ждать их корректного завершения мне необязательно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:36 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.P(ждать их корректного завершения мне необязательно) Ждать обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 10:59 |
|
||
|
Обмен между потоками в gcc
|
|||
|---|---|---|---|
|
#18+
Mari.PУважаемые профессионалы, подскажите пожалуйста: Linux Debian, gcc, конструкция проги такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вопрос - перед завершением головного потока надо написать pthread_join(thread, NULL);? или дочерние потоки завершатся вместе с основным? (ждать их корректного завершения мне необязательно) Кстати, такой код потенциально может плодить новые потоки бесконечно, что, в конечном итоге приведёт к снижению производительности из-за чрезмерного переключения контекста потоков процессором(ами). Переключение контекста -- убийца производительности. Я бы рекомендовал использовать ограниченный пул потоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 11:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39415542&tid=2018254]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 549ms |

| 0 / 0 |
