Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
vdvoid
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
#1

потокобезопасность

09.04.2013, 20:07. Просмотров 1255. Ответов 8
Метки нет (Все метки)

Интересно узнать что нужно и не нужно синхронизировать при доступе из разных потоков, например понятно что доступ к глобальным переменным нужно синхронизированть, а вот функции например, которые не используют глобальных переменных можно ли вызывать без блокировок в разных потоках?, использовать глобальные дескрипторы в разных потоках или создавать свои и тд. Понимаю что вопрос зависит от того с чем работешь, но хотелось бы узнать хотябы на уровне языка, без всяких библиотек.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 20:07
Ответы с готовыми решениями:

Потокобезопасность std::map::end, std::list::end
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if...

Потокобезопасность в C#
в общем вот есть такая структура данных, не будем вникать зачем мне она и что...

Потокобезопасность
Имеем простейший SubPub сервис public class...

Потокобезопасность, FileStream
пускаю потоки на выполнение этого метода: ... for (int b = 0; b <...

Потокобезопасность random
Доброго времени суток. Возникла проблема потокобезопастности в использование...

8
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
11.04.2013, 14:59 #2
Если есть общие ресурсы любого вида, нужно так или иначе синхронизировать доступ к этим ресурсам.
0
vdvoid
3 / 3 / 1
Регистрация: 26.02.2011
Сообщений: 99
11.04.2013, 15:10  [ТС] #3
а вот например разные системные вызовы?
std::cout << "чтото"; выводить на дисплей без синхронизации ,не важно в какой последовательности строки запишуться, не перемешаються ли атомарные данные (в данном случае содержимое строк)?, или в системных вызовах както по очереди все делается?
в разных потоках открывать сокет на один порт?
0
abit
272 / 271 / 83
Регистрация: 03.02.2013
Сообщений: 770
11.04.2013, 15:21 #4
или в системных вызовах както по очереди все делается?
если я верно понял вопрос, то для целей синхронизации общих данных между потоками - используется механизм семафоров и мьютексов (они разные бывают)
очень хорошо это описано у Тененбаума в книнге "Современные операционные системы"
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
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 ]
В сокетах зависит от реализации.
0
consthab2
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 2
11.04.2013, 16:13 #6
Самый простой ответ - все данные передавайте через аргументы. Глобальные переменные позволяют быстро дополнить функциональность программы, но закладывают мощную мину: Если программа сложна, то рано или поздно вы захотите создавать вторичные потоки. Вот тогда встанет важный вопрос готовы ли вы потратить время на исправление функций (дополнение их недостающими аргументами) либо согласны терять в производительности, ограничивая каждое обращение к глобальной переменной парой EnterCriticalSection/LeaveCriticalSection Подробнее о синхронизации потоков здесь: http://strongcpp.blogspot.ru/2013/04/blog-post.html
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
11.04.2013, 16:23 #7
Не совсем так. Вернее в корне не так, видимость переменной это ее видимость. Вы слышали о таких вещах как атомарность и неблокирующая синхронизация. Нужно понимать, что лочить, как лочить и когда лочить иначе ваша потокобезобасноть обойдется Вам дороже чем работа в одном потоке.
0
Avazart
Эксперт С++
7707 / 5616 / 546
Регистрация: 10.12.2010
Сообщений: 25,219
Записей в блоге: 17
11.04.2013, 16:37 #8
Цитата Сообщение от stima Посмотреть сообщение
Не совсем так. Вернее в корне не так, видимость переменной это ее видимость. Вы слышали о таких вещах как атомарность и неблокирующая синхронизация. Нужно понимать, что лочить, как лочить и когда лочить иначе ваша потокобезобасноть обойдется Вам дороже чем работа в одном потоке.
От ситуации зависит, ибо атомарность может вылиться тоже грамостким и запутанным кодом.
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
11.04.2013, 16:39 #9
Я же написал: "как лочить"^_^
0
11.04.2013, 16:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 16:39

Потокобезопасность и многопоточность
Разбираюсь с принципами работы кэширования. есть LRU and LFU алгоритмы. ...

Потокобезопасность uint
Всем привет. К примеру есть некий статический объект класса Player и он...

Потокобезопасность и прогресс
Здравствуйте, Помогите пожалуйста понять многопоточность и как сделать код...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru