Мне нужно взаимное исключение для чтения?

Необходимо будет настроить Вас IIS (предполагающий, что это - веб-сервер Ваш / с помощью), предоставление доступа от WLAN/LAN до определенных пользователей (или анонимный). Позвольте канавке IIS свой брандмауэр, если у Вас есть тот.

Ваше приложение не должно будет быть изменено, это просто объединяет в сеть проблемную конфигурацию ответа, с которой необходимо будет столкнуться, чтобы позволить доступу только LAN канавки и WLAN.

39
задан Matthew Murdoch 6 October 2009 в 13:50
поделиться

6 ответов

У вас есть два потока, они обмениваются информацией, да, вам нужен мьютекс, и вам, вероятно, также нужно условное ожидание .

В вашем примере (сравните state_ == ESTABLISHED) указывает, что поток №2 ожидает, пока поток №1 инициирует соединение / состояние. Без мьютекса или условий / событий поток №2 должен непрерывно опрашивать статус.

Потоки используются для повышения производительности (или улучшения отзывчивости), опрос обычно приводит к снижению производительности либо за счет использования большого количества ресурсов ЦП, либо за счет введения латентность из-за интервала опроса.

9
ответ дан 27 November 2019 в 02:52
поделиться

Да. Если поток a читает переменную, в то время как поток b записывает в нее, вы можете прочитать неопределенное значение. Операции чтения и записи не атомарны, особенно в многопроцессорной системе.

2
ответ дан 27 November 2019 в 02:52
поделиться

Вообще говоря, нет, если ваша переменная объявлена ​​с "volatile". И ТОЛЬКО если это единственная переменная - в противном случае вам следует быть очень осторожными с возможными расами.

1
ответ дан 27 November 2019 в 02:52
поделиться

Доступ к перечислению (чтение или запись) должен быть защищен.

Другое дело: Если конкуренция потоков меньше и потоки принадлежат одному процессу, то критическая секция будет лучше, чем мьютекс.

0
ответ дан 27 November 2019 в 02:52
поделиться

Это зависит.

В языке C ++ ничего не говорится о потоках или атомарности.

Но на большинстве современных ЦП чтение целого числа является атомарной операцией, которая означает, что вы всегда будете читать согласованное значение, даже без мьютекса.

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

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

Поэтому, если вы хотите правильного поведения, вы не должны ' Мне нужен мьютекс как таковой, и нет проблем, если другой поток записывает в переменную, пока вы ее читаете. Это будет атомарно, если вы не работаете с очень необычным процессором. Но вам действительно нужен какой-то барьер памяти, чтобы предотвратить переупорядочение в компиляторе или процессоре.

19
ответ дан 27 November 2019 в 02:52
поделиться

на самом деле нет причин блокировать доступ к объекту для чтения. вы хотите заблокировать его только во время записи. это именно то, что блокирует читатель-писатель. он не блокирует объект, пока нет операций записи. это улучшает производительность и предотвращает взаимоблокировки. см. следующие ссылки для более подробных объяснений:

wikipedia codeproject

1
ответ дан 27 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: