| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > процессы |
| Автор: IgnatM 1.5.2011, 16:27 | ||
| нужно написать программу, которая вычисляет значение интеграла функции 4/(1+Х^2) на интервале значений 0..1, методом трапеций, где каждый элемент суммы, вычисляется в отдельном процессе.... вот мой код, но в чем - то проблема - процессор перегружается и конечное значение интеграла выводиться несколько раз, я так понимаю промежуточные..Помогите пожалйста
|
| Автор: svlary 3.5.2011, 05:12 | ||
Т.е. Вы вычисляете значение дельты (new_add) в дочернем процессе, а присуммируете его
в родительском ? |
| Автор: IgnatM 3.5.2011, 10:18 |
| Да, так я хотел сделать, но не уверен, что суммирование происходит в родительском. |
| Автор: svlary 3.5.2011, 11:07 |
Так делать нельзя. Просто потому, что родительский и дочерний процесс работают в разных и никак не связанных областях памяти. Дочерний процесс, в момент создания. получает КОПИЮ области памяти родительского. Но дальше их дорожки расходятся и пытаться использовать значение переменной дочернего процесса в родительском, то же самое, что использовать подсказки из загробного мира в делах житейских... |
| Автор: null56 3.5.2011, 16:16 |
| IgnatM, извиняюсь за любопытство, хоть я и не любопытный, это принципиальная задача делать параллельно эти вычисления? если приципиально, то через процессы, почитай: http://linux.die.net/man/2/shmget http://linux.die.net/man/3/sem_init через потоки отталкивайся от (pthread) http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html]=http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html |
| Автор: IgnatM 3.5.2011, 17:09 |
| Здесь это не принципиально, нигде использоваться это больше не будет, но все же нужно сделать(( |
| Автор: null56 3.5.2011, 18:37 | ||
| ну если ты принципиально не хочешь использовать потоки, то придется подумать над тем, как передать данные от одного процесса другому... один способ я тебе упомянул выше, но можешь еще воспользоваться неименованными каналами почитай man pipe то есть код изменится примерно так
я не проверял, то что набросал, если пахать не будет, почитай man pipe, снизу страницу помощи, есть пример использонвания http://www.opennet.ru/man.shtml?topic=pipe&category=2&russian=2 |
| Автор: MAKCim 3.5.2011, 20:48 |
| еще можно mmap с MAP_SHARED перед форком |
| Автор: IgnatM 8.5.2011, 19:19 | ||
Сделал с помощью pipe. Вот код:
|