Форум программистов, компьютерный форум CyberForum.ru

потокобезопасность - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
09.04.2013, 20:07     потокобезопасность #1
Интересно узнать что нужно и не нужно синхронизировать при доступе из разных потоков, например понятно что доступ к глобальным переменным нужно синхронизированть, а вот функции например, которые не используют глобальных переменных можно ли вызывать без блокировок в разных потоках?, использовать глобальные дескрипторы в разных потоках или создавать свои и тд. Понимаю что вопрос зависит от того с чем работешь, но хотелось бы узнать хотябы на уровне языка, без всяких библиотек.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.04.2013, 14:59     потокобезопасность #2
Если есть общие ресурсы любого вида, нужно так или иначе синхронизировать доступ к этим ресурсам.
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
11.04.2013, 15:10  [ТС]     потокобезопасность #3
а вот например разные системные вызовы?
std::cout << "чтото"; выводить на дисплей без синхронизации ,не важно в какой последовательности строки запишуться, не перемешаються ли атомарные данные (в данном случае содержимое строк)?, или в системных вызовах както по очереди все делается?
в разных потоках открывать сокет на один порт?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
11.04.2013, 15:21     потокобезопасность #4
или в системных вызовах както по очереди все делается?
если я верно понял вопрос, то для целей синхронизации общих данных между потоками - используется механизм семафоров и мьютексов (они разные бывают)
очень хорошо это описано у Тененбаума в книнге "Современные операционные системы"
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
11.04.2013, 15:24     потокобезопасность #5
Насчет потока ввода вывода:
Concurrent access to a synchronized (§27.5.3.4) standard iostream object’s formatted and unformatted input (§27.7.2.1) and output (§27.7.3.1) functions or a standard C stream by multiple threads shall not result in a data race (§1.10). [ Note: Users must still synchronize concurrent use of these objects and streams by multiple threads if they wish to avoid interleaved characters. — end note ]
В сокетах зависит от реализации.
consthab2
Сообщений: n/a
11.04.2013, 16:13     потокобезопасность #6
Самый простой ответ - все данные передавайте через аргументы. Глобальные переменные позволяют быстро дополнить функциональность программы, но закладывают мощную мину: Если программа сложна, то рано или поздно вы захотите создавать вторичные потоки. Вот тогда встанет важный вопрос готовы ли вы потратить время на исправление функций (дополнение их недостающими аргументами) либо согласны терять в производительности, ограничивая каждое обращение к глобальной переменной парой EnterCriticalSection/LeaveCriticalSection Подробнее о синхронизации потоков здесь: http://strongcpp.blogspot.ru/2013/04/blog-post.html
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
11.04.2013, 16:23     потокобезопасность #7
Не совсем так. Вернее в корне не так, видимость переменной это ее видимость. Вы слышали о таких вещах как атомарность и неблокирующая синхронизация. Нужно понимать, что лочить, как лочить и когда лочить иначе ваша потокобезобасноть обойдется Вам дороже чем работа в одном потоке.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
11.04.2013, 16:37     потокобезопасность #8
Цитата Сообщение от stima Посмотреть сообщение
Не совсем так. Вернее в корне не так, видимость переменной это ее видимость. Вы слышали о таких вещах как атомарность и неблокирующая синхронизация. Нужно понимать, что лочить, как лочить и когда лочить иначе ваша потокобезобасноть обойдется Вам дороже чем работа в одном потоке.
От ситуации зависит, ибо атомарность может вылиться тоже грамостким и запутанным кодом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 16:39     потокобезопасность
Еще ссылки по теме:

Потокобезопасность ConcurrentDictionary vs Dictionary C#
Потокобезопасность uint C#
C# Потокобезопасность в C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
11.04.2013, 16:39     потокобезопасность #9
Я же написал: "как лочить"^_^
Yandex
Объявления
11.04.2013, 16:39     потокобезопасность
Ответ Создать тему
Опции темы

Текущее время: 06:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru