, если мы создаем, например, 3 потока T1, T2 и T3, которые вызывают одну и ту же функцию или процедуру каждый из них, тогда, если мы будем называть их на некоторое количество времени T1.start() T2.start() T3.start()
, это сработает? ? или нам нужно их синхронизировать?Несколько потоков Совместное использование одной и той же функции
3
A
ответ
3
Вы не синхронизируете функции, вы синхронизируете их доступ к ресурсам.
Если какая-либо из функций изменяет общий ресурс *, в то время как другие функции должны получить к нему доступ, как для чтения, так и для записи, вам необходимо синхронизировать доступ к ресурсу. В противном случае нет необходимости добавлять синхронизацию.
* ресурс может быть переменным членом, статической или не статичен, объект в памяти, объект операционной системы, такие как файл или сокет, сборник, и так далее.
1
Синхронизация требуется, только если вы читаете/записываете одни и те же переменные (состояние) в разных потоках. Если методы используют только локальные переменные, вам не нужно их синхронизировать.
Смежные вопросы
- 1. несколько потоков, обращаясь к одной и той же проблеме сокета
- 2. Несколько потоков, итераций по одной и той же карте
- 3. Несколько видов одной и той же модели
- 4. вызов одной и той же функции несколько раз при нажатии
- 5. Несколько разных типов возврата от одной и той же функции
- 6. Как применить несколько событий к одной и той же функции
- 7. Вызов одной и той же функции несколько раз при выборе
- 8. jQuery - Несколько триггеров для одной и той же функции
- 9. Несколько копий одной и той же функции в C
- 10. Несколько больших нотации вывода для одной и той же функции
- 11. HTML несколько событий для запуска одной и той же функции
- 12. Использование различных свойств объекта для одной и той же функции
- 13. Использование одной и той же функции для обработки разных классов
- 14. Использование одной и той же функции в нескольких классах
- 15. Несколько экземпляров одной и той же опции?
- 16. несколько экранов одной и той же активности
- 17. Несколько версий одной и той же библиотеки
- 18. Повторное использование одной и той же переменной
- 19. C# Использование одной и той же формы
- 20. Observable.Delay или Observable.Buffer повторное использование одной и той же темы
- 21. Несколько потоков с той же сопрограммой?
- 22. Выполнение нескольких потоков в одной и той же теме
- 23. Совместное использование одной и той же базы данных mongodb для Mac и ПК с использованием Shard
- 24. Совместное использование одной и той же константы строки в javascript и aspx файле
- 25. Совместное использование одной и той же модели просмотра между страницами/главной страницей и подстраницей
- 26. Доступ к этой функции из одной и той же функции
- 27. Использование той же службы и DAO из двух потоков
- 28. Использование одной и той же функции для стирания каждого повторяющегося элемента несколько по-разному в AngularJS
- 29. Как назначить несколько идентификаторов одной и той же кнопке
- 30. Несколько динамо-потоков в одной функции лямбда
У меня есть «Вектор», и я думал о создании 5 «Ниток», которые одновременно добавляют элементы в «Вектор», поэтому я предполагаю, что моя идея невозможна? –
@GhassenBellagha Добавление к вектору аннулирует коллекцию, поэтому вы правы, вы не можете сделать это с вектором без синхронизации. Если вы планируете добавлять элементы только в конце вектора, вы можете использовать ['BlockingQueue'] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue. html) без дополнительной синхронизации. –
dasblinkenlight
Итак, в этом случае нет необходимости в 'Threads', я имею в виду, что я могу вызывать нормальные функции вместо' Threads', потому что он, похоже, дает те же результаты!? Даже с 'BlockingQueue' 'Threads' не будет работать параллельно, так что то же самое с рабочей инструкцией после инструкции ..? –