|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
13.05.2016, 16:59 | #1 |
Заблокирован
Регистрация: 06.02.2011
Сообщений: 1,999
|
Сылка на обьект в обеих потоках
Доброй ночи !
Есть такая интересная ситуация. Предположим в потоке 1 и 2 есть ссылка на внешнюю структуру. Могут ли быть глюки при одновременном использовании этой ссылки в потоках, если с помощью этой ссылки обращаться к разным полям структуры из потоков? |
13.05.2016, 19:04 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
нет.
глюков не будет. однако, на некоторых архитектурах может быть просадка производительности, в связи с тем, что при изменении объекта в потоке одного ядра, поток другого ядра будет заново затягивать его в кэш процессора. то есть, изменение одного поля может повлечь за собой подкачку всего объекта в кэш ядра процессора. поэтому, если вы гарантируете, что два потока работают с разными полями, то есть смысл сделать так, что бы они гарантированно работали с разными объектами. |
14.05.2016, 06:27 | #3 | ||
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Bers, только вы не учитываете битовые поля. Официальное пояснение примерно такое:
Разным потокам разрешен доступ (чтение и запись) к разным memory location (хз как корректно перевести) без всяких синхронизационных требований. Небезопасно одновременно обновлять (один из потоков пишет) два неатомарных битовых поля одной структуры если все члены объявленные между ними так же битовые поля (ненулевого размера), не важно какой размер у этих промежуточных битовых полей. Когда один поток пишет в memory location и другой поток пишет или читет в неё же, то возникает data race если следующее не выполненно: 1. две конфликтующих операции атомарные 2. одна операция случается happens-before другой (смотреть memory_order) Код:
Цитата:
ЗЫ: Цитата:
Код:
Последний раз редактировалось 220Volt; 14.05.2016 в 09:14. |
||
14.05.2016, 13:10 | #4 |
Заблокирован
Регистрация: 06.02.2011
Сообщений: 1,999
|
время покажет.
Если имеем дело с многоядерным ЦПУ то два ядра могут одновременно использовать ссылку объекта и обращаться к полям структуры. Иногда мне надо обращаться и к совместным полям. Поэтому создавать два разных объекта не вижу смысла. Только ссылки. ___________________________________ ___________ Если я вхожу в зону совместных данных так WaitForSingleObject(hEvent, INFINITE); а выхожу так SetEvent(hEvent); Если мы имеем дело с несколькими ядрами , то могут ли два ядра войти в совместную зону данных при одновременном обращении к WaitForSingleObject(hEvent, INFINITE); надеюсь меня поняли что я имею ввиду |
14.05.2016, 13:34 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
Для этого надо мьютекс использовать а не сигнал. Сигнал могут принять несколько потоков (в зависимости от параметров) а мьютекс гарантированно всегда только один.
|
14.05.2016, 13:38 | #6 |
Заблокирован
Регистрация: 06.02.2011
Сообщений: 1,999
|
а событие что не то ?
хорошо бы взглянуть на факты что реально два ядра перешагнут за . WaitForSingleObject(hEvent, INFINITE); в своих потоках одни предпочитают светофоры а другие события. я склоняюсь ко второму. |
14.05.2016, 14:20 | #7 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
и это гарантировано.(как и сказали в зависимости от параметров) но у мютекса есть гарантия что его может освободить только поток что захватил его. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
14.05.2016, 14:46 | #8 | |
Заблокирован
Регистрация: 06.02.2011
Сообщений: 1,999
|
Цитата:
ответ нужен в виде фактов а не догадок, так как от этого зависит пропускная способность ГАЦ. |
|
14.05.2016, 17:33 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы тогда перечитайте мое сообщение, там вполне четкий ответ.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.05.2016, 22:47 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Загрузка изображения или сылка на изображение | xakkkkker | Работа с сетью в Delphi | 5 | 14.01.2013 23:04 |
Печать на обеих сторонах | agregator | Microsoft Office Excel | 1 | 24.11.2010 11:03 |
php5 постоянная сылка на переменную | 13th | Свободное общение | 1 | 13.09.2010 18:15 |
Сылка на внешний файл в отчете | Iskin | Microsoft Office Access | 0 | 30.03.2009 08:03 |