Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ UB в самописном пуле потоков https://www.cyberforum.ru/ cpp-beginners/ thread1924517.html
Всем привет. Примерно год назад писал пул потоков. Решил заюзать его в лабораторке на 4ом курсе. Задача простая, посчитать умножение матриц параллельно и сравнить производительность вычислений на цпу и гпу. Вот репозиторий: https://github.com/ANDR-ASCII/PerformanceComparison Вычисления на гпу находятся в другом репозитории. А конкретно проблема в чем? У меня пир завершении программы из 10...
Синхронизация доступа к данным с использованием std::mutex C++
Почему при использовании мьютексов их обычно создают где то в отдаленной от вызова области? Стандартный пример выглядит приблизительно так: std::mutex m; void foo() { m.lock(); std::cout << __FUNCTION__ << std::endl; m.unlock();
C++ Шаблоны как параметры шаблона https://www.cyberforum.ru/ cpp-beginners/ thread1924447.html
Привет, в книге увидел такой пример template<template<typename T> class x> class y; но из объяснений в книге я совершенно ничего не понял, можете пожалуйста объяснить смысл этого кода?
C++ Скрытие вводимого текста знаком "*" https://www.cyberforum.ru/ cpp-beginners/ thread1924445.html
Например, у меня в консоли есть команда "cin >> a;" И вот я хочу ввести "1234" Мой вопрос: возможно ли это сделать как ввод пароля в браузерах, когда я нажимаю клавишу, а она отображается только "****"? Заранее спасибо.
Сколько денег останется у Пети, бездумно покупающем мороженое C++
У первоклассника Пети m рублей. Мороженое стоит k рублей. Петя решил наесться досыта мороженого, для этого он покупал по одному мороженому и съедал ее до тех пор, пока ему хватало денег. Как Пете узнать, сколько денег останется у него в конце концов? Учтите, что Петя делить еще не умеет, а умеет только вычитать и складывать. Сколько мороженого он может съесть? Правильно? #include...
C++ Как убрать шумы и помехи на видео? Подскажите пожалуйста какими средствами и куда копать, чтобы убирать шумы и прочие помехи на видео, в дальнейшем нужно будет делать это в реальном времени? Спасибо. https://www.cyberforum.ru/ cpp-beginners/ thread1924434.html
C++ Вывести таблицу значений функции Написать программу вычисления таблицы значения функции f(x) на промежутке x принадлежит xн и xк с шагом h напишите пожалуйста полный код, буду очень благодарен. П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Редактор формул внизу страницы https://www.cyberforum.ru/ cpp-beginners/ thread1924428.html Ввод вывод в файл и консоль.(Кириллица) C++
int main() { setlocale(LC_ALL, "rus"); ifstream a("qwe.txt"); string x, y; getline(cin, x); //1- ввод из консоли в (x) a >> x; //2- вывод строки в файл getline(a, y); //3- считать строку из файла в (y) cout << y << endl; //4- вывод (y) в консоль
C++ Организовать хранение данных с применением контейнерного класса set https://www.cyberforum.ru/ cpp-beginners/ thread1924417.html
День добрый! Информационная система содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: номер, станция назначения, время отправления. Программа должна обеспечивать выбор с помощью меню и выполнение одной из следующих функций: • первоначальный ввод данных в информационную систему (с клавиатуры или из файла); • вывод сведений по всем поездам; •...
C++ Вектор и наследуемые классы https://www.cyberforum.ru/ cpp-beginners/ thread1924397.html
Удалить, ошибся, простите.
C++ Каждую малую латинскую букву строки заменить на стоящую перед ней в алфавите
Дана строка символов. Внести в текст изменения. Каждую малую латинскую букву заменить стоящей перед ней в алфавите. Букву a заменять буквой z.
C++ Используя оператор while определить сумму всех нечетных чисел в диапазоне от 1 до 99 https://www.cyberforum.ru/ cpp-beginners/ thread1924317.html
Оператор while
Evg
Эксперт CАвтор FAQ
21280 / 8302 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
21.02.2017, 21:50 0

Синхронизация доступа к разделяемой памяти - C++ - Ответ 10140016

21.02.2017, 21:50. Показов 10187. Ответов 73
Метки (Все метки)

Ответ

Цитата Сообщение от sys_beginner Посмотреть сообщение
Каждый процесс будет крутить цикл пока состояние флага не будет "свободным" и его нельзя будет занять
Каким конкретно способом поток будет ковырять в носу, зависит от конкретной задачи

Цитата Сообщение от sys_beginner Посмотреть сообщение
Вот я опасаюсь следующего:
Если предположим мы обрабатываем сетевое соединение в процессе и какой то процесс очень невезучий и все никак не может захватить доступ к критической секции. Выходит что клиент может ждать условно говоря бесконечно. Чего делать? Таймауты лепить? Или есть другие решения?
Если строишь велосипеды, то наверняка такое может случиться. Если использовать готовые решения, то скорее всего этих проблем не будет, т.к. эти проблемы авторы уже учли

Цитата Сообщение от sys_beginner Посмотреть сообщение
И еще меня беспокоит следующее: насколько я знаю менеджеры задач ОС не любят задачи которые работают в "холостую" и могут понижать им приоритет выполнения при смене с них контекста (не уверен, но где-то об этом читал)
Всё зависит от того, что такое "вхолостую"

Цитата Сообщение от sys_beginner Посмотреть сообщение
Вот спинлок как раз работает много в холостую
Спинлок - это, грубо говоря, специальный вид мьютекса, для которого процесс ковыряния в носу настроен на ожидание в цикле освобождения семафора. Мьютексы нужно использовать там, где критическая секция короткая. В таких условиях будет намного эффективнее проболтаться десяток тактов в цикле, чем тратить тысячи тактов на засыпание и просыпание

Цитата Сообщение от sys_beginner Посмотреть сообщение
Так же сталкивался с мнением что работающие в холостую потоки "засыпают" т.е перестают что-то делать
Так реализован мьютекс в glibc. Т.е. для мьютекса ковыряние в носу настроено на засыпание. Мьютексы нужно использовать там, где ожидание может быть сравнительно долгим или потоков много и они гарантированно будут ломиться к ресурсу одновременно в большом количестве. В таких случаях засыпание приведёт к снижению нагрузки на процессор по сравнению с ожиданием в цикле

Цитата Сообщение от sys_beginner Посмотреть сообщение
В таком случае интересно если поток процесса уснет то кто будет проверять освободилась ли критическая секция?
Операционная система его разбудит, когда освободится мьютекс

При этом вариант ковыряния в носу (жужжать или спать) - это заранее запрограммированное действие, а вовсе не результат деятельности планировщика задач

Цитата Сообщение от sys_beginner Посмотреть сообщение
И еще один вопрос:
Представим что некий вызов пытается захватить мьютекс по вашему примеру. Но мне не важно он захватит его или нет,
то есть эту операцию можно будет попробовать выполнить в следующий раз если в этом возникнет необходимость. В таком случае как я понимаю цикл не нужен?
Да

Цитата Сообщение от sys_beginner Посмотреть сообщение
Можно просто в функции посмотреть если !atomic_flag_test_and_set_explicit значит прерываем работу функции и так в следующий раз когда появится необходимость в данном вызове. Такое решение конкретно для данной ситуации не считается ошибкой?
По сути так и надо делать, если я правильно понимаю, что делает atomic_flag_test_and_set_explicit. Такая операция по умному называется trylock

Вернуться к обсуждению:
Синхронизация доступа к разделяемой памяти C++
1
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2017, 21:50
Готовые ответы и решения:

Реализация стека строк в разделяемой памяти (MPI)
Написать реализацию стека строк в разделяемой памяти. При запуске программа создает блок...

Как сохранить данные контейнера в разделяемой памяти
Ищу быстрый способ обмена данными между процессами. Процессы - одинакового типа т.е одна и та же...

Есть ли оверхед от использования разделяемой памяти, в сравнении с глобальной?
Если оверхед есть, то по каким причинам? Я понимаю что зависит от реализации. Но если есть какие...

Аська на основе разделяемой памяти
Прогреры и хакеры и им подобные... обращаюсь с особой просьбой: есть мысли по поводу перессылки...

73
21.02.2017, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 21:50
Помогаю со студенческими работами здесь

Запись и считывание разделяемой памяти
Всем доброго времени суток. Столкнулся с одной проблемой. Есть две программы: 1 создаёт...

Хранение указателей в разделяемой памяти
Выручайте ребята. Задали лабораторную на взаимодействие процессов. Не могу справиться с...

Считать структуру из разделяемой памяти
Добрый день! Есть разделяемый файл. В приложении А в файл запихиваю структуру. В приложении Б...

Сделать массив из 10 int в разделяемой памяти
Хочу сделать массив из 10 int в разделяемой памяти. Доступ из разных процессов от fork(). Так...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru