Как сделать кастомный объект сихронизации (юзер левел, кернел левел)
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 10.06.15 19:11
Оценка:
особенно не понятно "юзер левел, кернел левел"
Re: Как сделать кастомный объект сихронизации (юзер левел, кернел левел)
От: _ichensky Европа https://github.com/ichensky
Дата: 10.06.15 23:53
Оценка: -1
Здравствуйте, -rsdn-, Вы писали:

R>особенно не понятно "юзер левел, кернел левел"


Есть примитивы синхронизации которые работают в user mode, напр. Monitor.Enter(Object obj) внутри одного appdomain.
Т.е. .net внутри памяти выделенной для процесса в куче для каждого appdomain создает список хешей всех объектов которые лочатся во время выполне кода в контексте какого-либо треда, так другие треды понимают что если хеш объекта есть в списке значит он залочен.

Есть примитивы которые создают объект ядра ОС для синхронизации между процессами, напр. Mutex.

Создать кастомный объект синхронизации значит сделать похожий на уже существующие, но с какими-то кастомными фичами.
Если надо делать синхронизацию ресурсов на уровне ОС(между процессами, домменами), то можно наследоватся от базового класса MarshalByRefObject или более расширенного класса — его потомка: WaitHandle или вообще просто сделать врапер над уже сущесвующими примитивами синхронизации.

Рекомендуемая литература:
Рихтер .net, c\c++.
Windows Internals.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[2]: Как сделать кастомный объект сихронизации (юзер левел
От: ylem  
Дата: 11.06.15 00:03
Оценка: 4 (1) +2
_>Есть примитивы синхронизации которые работают в user mode, напр. Monitor.Enter(Object obj) внутри одного appdomain.

хм..
Точно-преточно? Т.е. он всю дорогу "спинит" (SpinWait?) поток, пока ждет?
Подскажите, пожалуйста, где про это прочитать.

upd:
http://stackoverflow.com/questions/14922437/when-exactly-net-monitor-goes-to-kernel-mode
Тут вот чуваки, создающие впечатление явно шарящих говорят, что никаких чудес:
1. проверка через Interlocked.CompareExchange, занят ли вообще
2. легкий SpinWait (ниже в сообщениях)
3. Mutex

Топикстартеру:
глава Hybrid Thread Synchronization Constructs из CLR via C# Рихтера
Отредактировано 11.06.2015 2:30 ylem . Предыдущая версия . Еще …
Отредактировано 11.06.2015 0:11 ylem . Предыдущая версия .
Re: Как сделать кастомный объект сихронизации (юзер левел, кернел левел)
От: Sinix  
Дата: 11.06.15 07:29
Оценка: 7 (2) +2 :))) :))) :))) :))
Здравствуйте, -rsdn-, Вы писали:

R>Как сделать кастомный объект сихронизации

R>особенно не понятно "юзер левел, кернел левел"

Элементарно:
1. изучаем существующие, подгоняем наш код под них.
2. находим готовую реализацию, утягиваем.
3. объясняем заказчику, что вообще-то нынче модно lock free (отсылка к no sql expert)
4. выносим код в облако, рассказываем заказчику про теорему Брюера. Опровергнет — получите нобелевку Тьюринга на халяву.
5. Спрашиваем на форуме "я изменяю текст на кнопке в фоновом потоке и всё падает, что не так с фреймворком?". Собираем ответы.
5a. Для троллей: дублируем вопрос на LOR и транслируем ответы между обоими ветками.
6. Пишем class MuSuperLock: ReaderWriterLockSlim { }. Глядя в круглые подергивающиеся глаза заказчика рассказываем про code reuse, DRY и нехватку миксинов в шарпе.
7. Коммерческий: приглашаем на интервью Рихтера, просим набросать свой lock. Продаём как "Одобрено Рихтером"
7a. ... от Sinclair-а: между делом доказываем Рихтеру, что он неправ
Автор: Sinclair
Дата: 24.03.09
.
7b. ... от Баллмера: покупаем Руссиновича и какую-нибудь компанию в нагрузку. Oh, wait...
8. Про стандартный "изучаем проблему, решаем, пишем код" даже писать не буду — слишком скучно.


P.S. Нужны ещё советы — смело обращайтесь, у меня
Автор: Sinix
Дата: 09.02.15
их
Автор: Sinix
Дата: 16.04.14
много
Автор: Sinix
Дата: 11.06.14
.
полезные_советы
Re[2]: Как сделать кастомный объект сихронизации (юзер левел, кернел левел)
От: Jack128  
Дата: 11.06.15 15:12
Оценка: +1 :)
Здравствуйте, Sinix, Вы писали:

Есть ощущение, что у Синикса выходные уже наступили, больно он сегодня остёр на язык -))
Re: Как сделать кастомный объект сихронизации (юзер левел, кернел левел)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.06.15 07:23
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>особенно не понятно "юзер левел, кернел левел"


В юзерлевел есть такие вещи, как Monitor
У него кучка интересных методов, в частности Pulse и PulseAll.
На ём реализуется lock, а есть более высокоуровневые срдества, например — блокирующая очередь.
Если у тебя уже есть такая очередь — можно на ней реализовать и мутекс и семафор.

В кернел левел любой блокирующий вызов через сеть, пайпы, файловую систему и тд, можно использовать для синхронизации. Хучь даже сам тред или процесс, не говоря про stdio и stdout.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.