Два разных потока, записывающих один объект или ресурс в одно и то же время, могут повредить его, и эта проблема является условием гонки. В многопоточных программах условия гонки не являются ошибкой времени компиляции или ошибкой/исключением во время выполнения. Состояние гонки - недостаток программного обеспечения для управления ресурсами, а также межпроцессное общение, и они противны, потому что они разрушают данные за кулисами. Выполнение одной и той же программы несколько раз приведет к тому, что результат будет результатом, который ожидался, а в других случаях не был ожидаемым.
Предотвращение условий гонки в потоках с использованием взаимного исключения. Если доступен только один объект или ресурс, используйте мьютекс, примером может служить ЖК-дисплей или один объект, в противном случае при многократном использовании семафора примером может служить четыре порта USB. Ресурсы - это данные и устройства. Данные представляют собой переменные, объекты, структуры данных и т. Д. Устройства представляют собой ЖК-дисплей, принтеры, USB-порты и т. Д.
Оглядываясь на программу как последовательный одиночный поток и решайте задачи разделения, которые необходимо выполнить, могут проблема больше времени отладки. Текстовый процессор представляет собой многопоточную программу, состоящую из нескольких потоков. Мнимый пример потоков: читать текстовый файл, отображать текст, сохранять текстовый файл и, возможно, автоматически сохранять его каждые пять минут. Нити должны быть действиями, которые можно выполнить заранее, и заметить, что все потоки в текстовом процессоре имеют текст в качестве ресурса.
Если у вас уже есть код или контрольные значения, используйте инструкцию printf вместо cout до и после объекта в каждом потоке. См. Причину printf вместо cout here.
Все операционные системы имеют межпроцессное взаимодействие, но API отличается. Linux использует POSTIX API, а Windows использует Win32 или Windows API, но используются одинаково.
Чтение Материал http://drdobbs.com/cpp/199200938?pgno=1
^-Summarized некоторые статьи в то, что было написано
Lefteris, благодарю вас за ответ. Я использую библиотеку Boost и пытаюсь создать кросс-платформенное приложение как для Windows, так и для Linux. Я довольно новичок в многопоточном программировании, и я очень смущен различными технологиями связи. Мьютексы и семафоры, как вы уже упоминали, я также слышал о синхронизации с использованием очередей сообщений. Просто интересно, существует ли какой-либо «стандартный» подход. Спасибо. – 2607
Это то, чего я пытаюсь достичь. У меня есть вектор объектов M, и каждый объект имеет N переменных-членов. Есть потоки X, и каждый из них может обращаться к любым переменным-членам любого объекта внутри вектора. Я пытаюсь добиться этого, а также иметь минимальный критический раздел, т. Е. Блокировать как можно меньше каждый раз. Благодарю. – 2607
Если вы хотите, чтобы доступ был эксклюзивным с muttualy, то только один поток может получить доступ к одной из N-членных переменных в то время, когда вам придется использовать N мьютексов. Я не знаком с библиотекой boost, но я считаю, что у нее есть функция mutex, верно? – Lefteris