синхронизация: 1-2 писателя и множество читателей
От: greenloki  
Дата: 03.05.06 11:58
Оценка:
w2k+
Интересует внутрипроцессная синхронизация между большим количеством потоков читателей и 1-2 редкими потоками писателями, но не между читателями. То есть потоки читатели не должны блокировать друг друга, блокировка читателей возможна только при записи, блокировка писателей возможна при чтении. Я так представляю будут использоваться критические секции или семафоры (мне всё равно, но желательно более быстрый способ для читателей), плюс возможно также класс хелпер. Подскажите хоть идею, можно в псевдокоде. (что-нибудь простое, я синхронизирую доступ к обычному std::vector)
Re: синхронизация: 1-2 писателя и множество читателей
От: Аноним  
Дата: 03.05.06 12:10
Оценка: 3 (1)
Здравствуйте, greenloki, Вы писали:

G>w2k+

G>Интересует внутрипроцессная синхронизация между большим количеством потоков читателей и 1-2 редкими потоками писателями, но не между читателями. То есть потоки читатели не должны блокировать друг друга, блокировка читателей возможна только при записи, блокировка писателей возможна при чтении. Я так представляю будут использоваться критические секции или семафоры (мне всё равно, но желательно более быстрый способ для читателей), плюс возможно также класс хелпер. Подскажите хоть идею, можно в псевдокоде. (что-нибудь простое, я синхронизирую доступ к обычному std::vector)

Ну событиями можно — надо только одно событие записи. Т.е. примерно это выглядит так: читатель ждет освобождения события записи, потом читает, писатель также ждет освобождения собития записи (чтобы не перетереть других писателей), после этого сразу занимает событие записи — пишет, осбождает событие.
Re: синхронизация: 1-2 писателя и множество читателей
От: Dmitry Kotlyarov Россия  
Дата: 03.05.06 12:12
Оценка:
Здравствуйте, greenloki, Вы писали:

G>w2k+

G>Интересует внутрипроцессная синхронизация между большим количеством потоков читателей и 1-2 редкими потоками писателями, но не между читателями. То есть потоки читатели не должны блокировать друг друга, блокировка читателей возможна только при записи, блокировка писателей возможна при чтении. Я так представляю будут использоваться критические секции или семафоры (мне всё равно, но желательно более быстрый способ для читателей), плюс возможно также класс хелпер. Подскажите хоть идею, можно в псевдокоде. (что-нибудь простое, я синхронизирую доступ к обычному std::vector)


См. boost::read_write_mutex.
Re: синхронизация: 1-2 писателя и множество читателей
От: Roman Odaisky Украина  
Дата: 03.05.06 17:42
Оценка:
Lock-free хранилище
Автор: remark
Дата: 16.04.06
До последнего не верил в пирамиду Лебедева.
Re: синхронизация: 1-2 писателя и множество читателей
От: MaximE Великобритания  
Дата: 03.05.06 18:30
Оценка:
greenloki wrote:

> w2k+

> Интересует внутрипроцессная синхронизация между большим количеством
> потоков читателей и 1-2 редкими потоками писателями, но не между
> читателями. То есть потоки читатели не должны блокировать друг друга,
> блокировка читателей возможна только при записи, блокировка писателей
> возможна при чтении. Я так представляю будут использоваться критические
> секции или семафоры (мне всё равно, но желательно более быстрый способ
> для читателей), плюс возможно также класс хелпер. Подскажите хоть идею,
> можно в псевдокоде. (что-нибудь простое, я синхронизирую доступ к
> обычному std::vector)
> синхронизация: 1-2 писателя и множество читателей <?mid=1878385>

Используй sequence lock.
http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20Kernel%20Synchronization.pdf

What are sequence locks (seqlock_t)
– Similar to reader-writer spin locks
– But favor writers over readers
– A writer accesses data after acquiring a lock, while readers check the
lock by polling the sequence count
• Read needs retry if the count differs or it is an odd number


--
Maxim Yegorushkin
Posted via RSDN NNTP Server 2.0
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: greenloki  
Дата: 04.05.06 00:22
Оценка:
А>Ну событиями можно — надо только одно событие записи. Т.е. примерно это выглядит так: читатель ждет освобождения события записи, потом читает, писатель также ждет освобождения собития записи (чтобы не перетереть других писателей), после этого сразу занимает событие записи — пишет, осбождает событие.
спасибо! попробую
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: greenloki  
Дата: 04.05.06 00:26
Оценка:
DK>См. boost::read_write_mutex.
до буста я пока не добрался ещё как повлияет на размер экзешника если я всё таки попробую подключить буст и использовать этот метод?
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: greenloki  
Дата: 04.05.06 00:27
Оценка:
RO>Lock-free хранилище
Автор: remark
Дата: 16.04.06

ну нет, этих монстров в другой раз, когда буду писать что-то эпохальное, а для простого вектора хочется что-то попроще
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: greenloki  
Дата: 04.05.06 00:31
Оценка:
ME>Используй sequence lock.
ME>http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20Kernel%20Synchronization.pdf
а как это соотносится с требованием w2k+?, или ты предлагаешь отложить всё и занятся их реализацией под винду
Re[3]: синхронизация: 1-2 писателя и множество читателей
От: Аноним  
Дата: 04.05.06 07:02
Оценка: :)
Здравствуйте, greenloki, Вы писали:

ME>>Используй sequence lock.

ME>>http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20Kernel%20Synchronization.pdf
G>а как это соотносится с требованием w2k+?, или ты предлагаешь отложить всё и занятся их реализацией под винду

Ну тебе не угодишь...
То буст большой, то самому что-то делать.

Подключение буста, кстати, не сильно скажется на твоем экзешнике.
Ну ни сильней, чем ты все сам ручками аккуратно будешь делать.
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: Аноним  
Дата: 04.05.06 07:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну событиями можно — надо только одно событие записи. Т.е. примерно это выглядит так: читатель ждет освобождения события записи, потом читает, писатель также ждет освобождения собития записи (чтобы не перетереть других писателей), после этого сразу занимает событие записи — пишет, осбождает событие.


Писатель еще должен дождаться, что текущие читатели все дочитали
и заблокировать на время записи всех других писателей/читателей.

В общем в таких вещах лучше довериться проверенным решениям,
если конечно нету цели набить шишки самому в целях обучения.
Re[2]: синхронизация: 1-2 писателя и множество читателей
От: Dmitry Kotlyarov Россия  
Дата: 04.05.06 07:22
Оценка:
DK>См. boost::read_write_mutex.


Извини, поторопился: boost::read_write_mutex убрали, т.к. он приводил к deadlock-ам.

Но если операции модификации/доступа быстрые (что часто и бывает), то конкуренция за ресурс может быть невысокой, тогда и обычный мьютекс подойдет. Этот факт также свидетельствует о том, что в такой ситуации критические секции не дадут выигрыша в скорости, т.к., если мьютекс свободен, то WaitForSingleObject вернет управление, не переходя в режим ядра.
Re[3]: синхронизация: 1-2 писателя и множество читателей
От: MaximE Великобритания  
Дата: 04.05.06 08:19
Оценка: 2 (1)
Здравствуйте, greenloki, Вы писали:

ME>>Используй sequence lock.

ME>>http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20Kernel%20Synchronization.pdf
G>а как это соотносится с требованием w2k+?, или ты предлагаешь отложить всё и занятся их реализацией под винду

Копируешь код из хедера линукс. Изменяешь gnu asm на vc asm, работы на час.
Re[3]: синхронизация: 1-2 писателя и множество читателей
От: Посторонним В. Беларусь  
Дата: 04.05.06 09:53
Оценка:
Здравствуйте, Dmitry Kotlyarov, Вы писали:

DK>>См. boost::read_write_mutex.



DK>Извини, поторопился: boost::read_write_mutex убрали, т.к. он приводил к deadlock-ам.


А можно вкратце почему? Какого типа проблемы возникали?
Я к тому что уже где-то слышал, что RW мутексы — это не очень хорошо, хотелось бы узнать почему же.
Re[4]: синхронизация: 1-2 писателя и множество читателей
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 04.05.06 09:58
Оценка: 1 (1) :))
Здравствуйте, MaximE, Вы писали:

ME>>>Используй sequence lock.

ME>>>http://www.cs.ccu.edu.tw/~lhr89/linux-kernel/Linux%20Kernel%20Synchronization.pdf

G>>а как это соотносится с требованием w2k+?, или ты предлагаешь отложить всё и занятся их реализацией под винду


ME>Копируешь код из хедера линукс. Изменяешь gnu asm на vc asm, работы на час.


Не забываешь изменить лицензию своего кода на GPL
Re[4]: синхронизация: 1-2 писателя и множество читателей
От: Посторонним В. Беларусь  
Дата: 26.05.06 21:23
Оценка:
Здравствуйте, Посторонним В., Вы писали:

ПВ>Здравствуйте, Dmitry Kotlyarov, Вы писали:


DK>>>См. boost::read_write_mutex.

DK>>Извини, поторопился: boost::read_write_mutex убрали, т.к. он приводил к deadlock-ам.

ПВ>А можно вкратце почему? Какого типа проблемы возникали?

ПВ>Я к тому что уже где-то слышал, что RW мутексы — это не очень хорошо, хотелось бы узнать почему же.

Хм, что, никто не знает?
Re[5]: синхронизация: 1-2 писателя и множество читателей
От: MaximE Великобритания  
Дата: 27.05.06 10:04
Оценка:
Здравствуйте, Посторонним В., Вы писали:

ПВ>Здравствуйте, Посторонним В., Вы писали:


ПВ>>Здравствуйте, Dmitry Kotlyarov, Вы писали:


DK>>>>См. boost::read_write_mutex.

DK>>>Извини, поторопился: boost::read_write_mutex убрали, т.к. он приводил к deadlock-ам.

ПВ>>А можно вкратце почему? Какого типа проблемы возникали?

ПВ>>Я к тому что уже где-то слышал, что RW мутексы — это не очень хорошо, хотелось бы узнать почему же.

ПВ>Хм, что, никто не знает?


Я не слыхал ничего плохого об rw мьютексах.

Современные POSIX реализации предоставляют такой мьютекс, legacy же платформы, как виндоза, к примеру, не имеют такого мьютекса, поэтому в бусте была некачественная самопальная реализация такого мьютекса.
Re[6]: синхронизация: 1-2 писателя и множество читателей
От: Посторонним В. Беларусь  
Дата: 27.05.06 15:37
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, Посторонним В., Вы писали:


DK>>>>Извини, поторопился: boost::read_write_mutex убрали, т.к. он приводил к deadlock-ам.


ПВ>>>А можно вкратце почему? Какого типа проблемы возникали?

ПВ>>>Я к тому что уже где-то слышал, что RW мутексы — это не очень хорошо, хотелось бы узнать почему же.

ПВ>>Хм, что, никто не знает?


ME>Я не слыхал ничего плохого об rw мьютексах.


ME>Современные POSIX реализации предоставляют такой мьютекс, legacy же платформы, как виндоза, к примеру, не имеют такого мьютекса, поэтому в бусте была некачественная самопальная реализация такого мьютекса.


Я бы не стал так уж хоронить виндозу тока потому что она не соответствует POSIX. Не потому что она мне нравится, а потому что ей пренадлежит приличная часть рынка и с этим надо как-то жить

А может посоветуешь какие есть нормальные реализации rw lock-ов для Windows и Linix?
Re[7]: синхронизация: 1-2 писателя и множество читателей
От: MaximE Великобритания  
Дата: 27.05.06 20:44
Оценка:
Здравствуйте, Посторонним В., Вы писали:

[]

ME>>Современные POSIX реализации предоставляют такой мьютекс, legacy же платформы, как виндоза, к примеру, не имеют такого мьютекса, поэтому в бусте была некачественная самопальная реализация такого мьютекса.


ПВ>Я бы не стал так уж хоронить виндозу тока потому что она не соответствует POSIX. Не потому что она мне нравится, а потому что ей пренадлежит приличная часть рынка и с этим надо как-то жить


Не нужно с этим жить. Мое мнение.

ПВ>А может посоветуешь какие есть нормальные реализации rw lock-ов для Windows и Linix?


Не смогу посоветовать. Я доволен тем, что предоставляет POSIX.
Re[8]: синхронизация: 1-2 писателя и множество читателей
От: Посторонним В. Беларусь  
Дата: 27.05.06 21:49
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Здравствуйте, Посторонним В., Вы писали:

ME>>>Современные POSIX реализации предоставляют такой мьютекс, legacy же платформы, как виндоза, к примеру, не имеют такого мьютекса, поэтому в бусте была некачественная самопальная реализация такого мьютекса.
ПВ>>А может посоветуешь какие есть нормальные реализации rw lock-ов для Windows и Linix?
ME>Не смогу посоветовать. Я доволен тем, что предоставляет POSIX.

Реализация POSIX для Win32 тоже предоставляет rw locks. Непонятно только зачем в бусте хотели ее еще раз переделать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.