Все таки многопоточность или форк?
Форк - это многопроцессность - разные адресные пространства.
Многопоточность это pthread_create() (и т.п.) в линукс - это одно адресное пространство.
Проще в многопоточном варианте решать вашу задачу, а не в многопроцессном, т.к. результат вычислений в каждом потоке не нужно передавать управляющему потоку - он и так уже будет известен благодаря общей памяти.
В целом алгоритм достаточно прост - разделяете ваш массив на N кусков (по количеству реальных ядер процессора), для каждого куска находите смещение начала и смещение конца (естественно надо найти для каждого куска первую открывающую скобку и последнюю закрывающую). Запускаете на каждый кусок свой поток, который будет работать в пределах выделенного диапазона.
После того как все потоки завершаться вам останется только в основном потоке выбрать максимум из результатов вычислений.
Для варианта с форком все примерно так же, только надо продумать как передать новому процессу его диапазон и как возвратить результат основному процессу.
Вам нужно загрузиться с флэшки? Для чего?
Если установить винду, то для изготовления загрузочной флэшки используйте родную микрософтовскую софтину (Media Creation Tool), она сама скачает правильный образ и зальет его на флэшку как надо.
Если вам нужна загрузочная диагностическая флэшка - используйте проверенную сборку. Я использую adminpe.ru, ни разу не подводила. Инструкция по созданию загрузочной флэшки есть в комплекте.
Евгений Якушов, На счет getx: тут два варианта, либо какой-то поток параллельно изменяет значение. Либо у вас плавает state. Если state.x не атомарная переменная, то функция в таком виде не потокобезопасна.
Та же фигня стала с некоторых пор. Похоже мелкософт очередное обновление подогнал, которое просаживает дисковую загрузку. Пока не понятно, что с этим счастьем делать.
Правда у меня после загрузки минут через 3-5 заканчивается эта канитель. Поэтому пока ничего толком не предпринимал.
Если отжирается память - значит есть утечки, т.е. не освобождаете что-то. Можно прогнать программу через valgrind или Intel VTune (Amplifier) - они умеют находить утечки.
Про 50 - как писали ниже - getx не потокобезопасна.
Гуглите про потокобезопасность, примитивы синхронизации, мьютексы, атомарные переменные...
Ключ /TA лишний, посмотрите справку по нему внимательней.
Кроме того, в таком варианте вы берете самый последний файл, если файлов много, то операция может занять довольно много времени.
Если сделать /O-D и выходить из цикла сразу после первого присваивания, то будет заметно быстрей.
Аzad Kichibekov, Значит отдельного файла для openvpn нет, видимо лог openvpn в общем журнале (это нормальная ситуация): syslog обычно файл называется.
Чтоб его долго не лопатить, сначала попытайтесь запустить openvpn, а потом смотрите журнал с конца.
Запустить можно командой: sudo systemctl start openvpn
Не очень удачный источник знаний вы себе выбрали - там бла-бла 98%, устал колесо на мыши крутить до того момента, когда уже начнет по теме писать.
Из ошибки ясно, что openvpn у вас не стартовал, видимо ошибка.
Текст ошибки ищите в логе, логи лежат в /var/log (возможно там есть файл openvpn.log или что-то типа того).
Хорошо бы так же выложить конфиг сервера и конфиг клиента. Реальные IP адрес в клиентском конфиге можете заменить на произвольный адрес.
Кроме конфига клиента, обычно должны быть файлы ключей клиента. Я не увидел в статье, что там идет речь про ключи клиента, там только конфиг фигурирует.
Роман, В данной задаче, я думаю, что это вообще не будет проблемой, т.к. никаких вычислений с элементами массива не проводится после ввода. Но я бы, на всякий случай, изменил тип массива на int.
Я эту тему затронул, чтоб Протопоп Метапоп знал, что есть такая проблема. Округление может помочь в простых случаях. Но часто бывает, что вы не знаете какого порядка числа в переменной, или нужно выжать максимально возможную точность и т.п. На тему сравнения чисел с плавающей точкой в инете много информации и обычно округление даже не предлагается как вариант решения проблемы.
Протопоп Метапоп, Не стоит сравнивать вот так в лоб числа с плавающей точкой никогда. Погуглите на эту тему и больше так не делайте. Хотя применительно к этой конкретной задаче это, возможно, и не является проблемой, (а может и является), но в других более сложных задачах это встанет в полный рост и будете потом гадать из-за чего программа не работает.
Для вашей задачи просто замените тип массива на int. Ну и входные данные надо поменять.
Поставьте break после str = false в том же ifе, т.к. дальше нет смысла продолжать сравнения.
Korhoff, Можно профили перенести на диск Д. Правда я никогда не переносил доменные профили, только локальные, но по идее и с доменными должно то же самое прокатить.
hostadmin, На ВПН клиентах установили шлюзом по умолчанию ВПН сервер?
Если да, то в принципе в правильном направлении идете, надо с помощью iptables сделать перенаправление пакетов из ВПН сети на нужный интерфейс (или в NAT на нужном интерфейсе). Но по iptables я не подскажу, у самого мало опыта с ним.
Видимо надо оставить в изображении только 1 канал, а у тебя их 3, хоть 2 из-низ заполнены нулями.
Т.е. результирующий массив будет размерностью (696, 534, 1)
ramanovsky, Программируете эту же игру?
1.Самый простой вариант переходить на винду полностью.
2.Второй комп с виндой
3.Вторую видеокарту в комп, ее пробрасываете в вируталку (т.е. хостовавя система не будет ее использовать совсем). Там уже ставите родные драйвера на видюху и т.п. Потребуется отдельный монитор, подключенный ко второй видюхе, чтоб виртуалка начала на него что-то выводить. Проброс видео могут поддерживать не все гипервизоры. В свое время читал, что KVM это умеет.
Форк - это многопроцессность - разные адресные пространства.
Многопоточность это pthread_create() (и т.п.) в линукс - это одно адресное пространство.
Проще в многопоточном варианте решать вашу задачу, а не в многопроцессном, т.к. результат вычислений в каждом потоке не нужно передавать управляющему потоку - он и так уже будет известен благодаря общей памяти.
В целом алгоритм достаточно прост - разделяете ваш массив на N кусков (по количеству реальных ядер процессора), для каждого куска находите смещение начала и смещение конца (естественно надо найти для каждого куска первую открывающую скобку и последнюю закрывающую). Запускаете на каждый кусок свой поток, который будет работать в пределах выделенного диапазона.
После того как все потоки завершаться вам останется только в основном потоке выбрать максимум из результатов вычислений.
Для варианта с форком все примерно так же, только надо продумать как передать новому процессу его диапазон и как возвратить результат основному процессу.
Удачи!