powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MemoryBarrier() и Lock(_) {}
13 сообщений из 13, страница 1 из 1
MemoryBarrier() и Lock(_) {}
    #39540584
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, может есть какой то сакральный смысл использования Thread.MemoryBarrier() который находится под блоком Lock? ведь данный участок кода, так и так, не будет выполняться одновременно в разных потоках, так как синхронизирован. Зачем тогда MemoryBarrier?
в рамках 1 потока, мне совершенно всё равно, как процессор будет переставлять команды.
может я чего то не знаю или это просто, кто то от большого ума сделал?
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540589
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MSDN так написано
https://msdn.microsoft.com/ru-ru/library/system.threading.thread.memorybarrier(v=vs.110).aspx MemoryBarrier is required only on multiprocessor systems with weak memory ordering (for example, a system employing multiple Intel Itanium processors).
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540590
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

ну допустим именно на этом процессоре будет работать, какой смысл делать это, если этот участок и так синхронизирован.
я просто сейчас работаю аквалангистом ассенизатором =)
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540606
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ MSDN так написано
И там же, дальше "For most purposes, the C# lock statement, the Visual Basic SyncLock statement, or the Monitor class provide easier ways to synchronize data."
Хотя, как я понял, MemoryBarrier здесь (в .net) такой же как и в OpenCL (скалярные вычисления), суть не блокировать (одним от остальных), а "выровнять/дождаться" выполнение по всем потокам до этой заданной точки кода... Тогда, конечно, смысла внутри Lock нет никакого.
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540650
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesПодскажите, может есть какой то сакральный смысл использования Thread.MemoryBarrier() который находится под блоком Lock? ведь данный участок кода, так и так, не будет выполняться одновременно в разных потоках, так как синхронизирован. Зачем тогда MemoryBarrier?
в рамках 1 потока, мне совершенно всё равно, как процессор будет переставлять команды.
может я чего то не знаю или это просто, кто то от большого ума сделал?

Утверждение верно, но не имеет отношения к барьеру. Сегмент кода внутри лока вполне может работать с паматью / объектами кототрые доступны другим потокам и могут использоватся в совершенно другом месте / коде.
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540656
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRDima TВ MSDN так написано
И там же, дальше "For most purposes, the C# lock statement, the Visual Basic SyncLock statement, or the Monitor class provide easier ways to synchronize data."
Хотя, как я понял, MemoryBarrier здесь (в .net) такой же как и в OpenCL (скалярные вычисления), суть не блокировать (одним от остальных), а "выровнять/дождаться" выполнение по всем потокам до этой заданной точки кода... Тогда, конечно, смысла внутри Lock нет никакого.

Ты не путаeш class Barrier и метод MemoryBarrier ?
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540661
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronТы не путаeш class Barrier и метод MemoryBarrier ?
Может и путаю, объясни, пожалуйста, если в теме)) Но все же, думаю, метод MemoryBarrier ближе к openCL-ному -
https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/barrier.html
В любом случае все это из одной и той же "оперы", имхо.
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540672
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

All work-items in a work-group executing the kernel on a processor must execute this function before any are allowed to continue execution beyond the barrier.

По описанию workitems "задерживаются" пока все не достигнут бариера. Это поведение аналогично классу Barrier.
MemoryBarrier нокого не задерживает - другое.
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540684
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesто от большого ума сделал?
+1 ))
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540692
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronMemoryBarrier нокого не задерживает - другое.
"Synchronizes memory access as follows: The processor executing the current thread cannot reorder instructions in such a way that memory accesses prior to the call to MemoryBarrier execute after memory accesses that follow the call to MemoryBarrier." - т.е. не "задерживает", а "упорядочивает (возможно беспорядочный) доступ к памяти"? или как правильно и понятно сформулировать что именно этот метод делает?
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540726
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRт.е. не "задерживает", а "упорядочивает (возможно беспорядочный) доступ к памяти"? или как правильно и понятно сформулировать что именно этот метод делает?
Именно так и понимать. Барьеры памяти используются в lock-free алгоритмах, т.е. многопоточных без явных блокировок.
Они гарантируют что код отработает точно в таком порядке как написан https://habrahabr.ru/post/130318/
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540735
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Понял, спасибо вам с mikron за разъяснения. Т.е., Thread.MemoryBarrier "из другой оперы", "антиоптимизационной"...
Вот еще неплохая ссылка - http://www.albahari.com/threading/part4.aspx
...
Рейтинг: 0 / 0
MemoryBarrier() и Lock(_) {}
    #39540756
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronLR,

All work-items in a work-group executing the kernel on a processor must execute this function before any are allowed to continue execution beyond the barrier.

По описанию workitems "задерживаются" пока все не достигнут бариера. Это поведение аналогично классу Barrier.
MemoryBarrier нокого не задерживает - другое.
если коротко, он гарантирует, что инструкции сверху будет выполнен до инструкций снизу :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / MemoryBarrier() и Lock(_) {}
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]