|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
Подскажите, может есть какой то сакральный смысл использования Thread.MemoryBarrier() который находится под блоком Lock? ведь данный участок кода, так и так, не будет выполняться одновременно в разных потоках, так как синхронизирован. Зачем тогда MemoryBarrier? в рамках 1 потока, мне совершенно всё равно, как процессор будет переставлять команды. может я чего то не знаю или это просто, кто то от большого ума сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 15:44 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
В 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). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 15:51 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
Dima T, ну допустим именно на этом процессоре будет работать, какой смысл делать это, если этот участок и так синхронизирован. я просто сейчас работаю аквалангистом ассенизатором =) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 15:53 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
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 нет никакого. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 16:23 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
Roman MejtesПодскажите, может есть какой то сакральный смысл использования Thread.MemoryBarrier() который находится под блоком Lock? ведь данный участок кода, так и так, не будет выполняться одновременно в разных потоках, так как синхронизирован. Зачем тогда MemoryBarrier? в рамках 1 потока, мне совершенно всё равно, как процессор будет переставлять команды. может я чего то не знаю или это просто, кто то от большого ума сделал? Утверждение верно, но не имеет отношения к барьеру. Сегмент кода внутри лока вполне может работать с паматью / объектами кототрые доступны другим потокам и могут использоватся в совершенно другом месте / коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 17:15 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 17:25 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
mikronТы не путаeш class Barrier и метод MemoryBarrier ? Может и путаю, объясни, пожалуйста, если в теме)) Но все же, думаю, метод MemoryBarrier ближе к openCL-ному - https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/barrier.html В любом случае все это из одной и той же "оперы", имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 17:36 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
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 нокого не задерживает - другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 17:48 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
Roman Mejtesто от большого ума сделал? +1 )) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 18:08 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
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." - т.е. не "задерживает", а "упорядочивает (возможно беспорядочный) доступ к памяти"? или как правильно и понятно сформулировать что именно этот метод делает? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 18:20 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
LRт.е. не "задерживает", а "упорядочивает (возможно беспорядочный) доступ к памяти"? или как правильно и понятно сформулировать что именно этот метод делает? Именно так и понимать. Барьеры памяти используются в lock-free алгоритмах, т.е. многопоточных без явных блокировок. Они гарантируют что код отработает точно в таком порядке как написан https://habrahabr.ru/post/130318/ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 19:18 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
Dima T, Понял, спасибо вам с mikron за разъяснения. Т.е., Thread.MemoryBarrier "из другой оперы", "антиоптимизационной"... Вот еще неплохая ссылка - http://www.albahari.com/threading/part4.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 19:33 |
|
MemoryBarrier() и Lock(_) {}
|
|||
---|---|---|---|
#18+
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 нокого не задерживает - другое. если коротко, он гарантирует, что инструкции сверху будет выполнен до инструкций снизу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2017, 21:40 |
|
|
start [/forum/topic.php?fid=20&msg=39540661&tid=1399651]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 462ms |
0 / 0 |