2009-07-24 5 views
0

Я запускаю приложение с большим количеством потоков. Все эти потоки обновляют базу данных с помощью GPS-координат. Между тем приложение может получать запрос на синхронизацию. Прежде чем сервер сможет обработать этот запрос, все написанные потоки должны закончить работу. Поэтому я использую массив ручек ожидания для управления этим.Увеличьте приоритет потока на машинах ожидания

Так вот сценарий:

Актеры:

1 Synchro Thread 
N Writing Thread 

N Пишущие нити работают. Одна синхроническая нить прибывает на wait ручка останавливается. Он утверждает, что замок. Это делается в в конце списка из раздела «Требование блокировки потоков».

Проблема в том, что этот список может быть очень длинным, или моя синхронизирующая нить - - приоритет.

Как я мог достичь, чтобы дать ему VIP-проход?

ответ

2

Похоже, что вместо этого вы должны использовать System.Threading.ReaderWriterLockSlim. Авторы могут действовать в режиме «Чтение» блокировки, поток Synchro, требующий эксклюзивного доступа, может войти в режим «Write».

+0

Это не сработает в моей архитектуре. Писатели действительно должны закончить работу до того, как синхронизация состоится. Я просто хочу узнать, может ли молодой поток получить приоритет против более старого, чтобы получить блокировку. – Roubachof

+0

Writer (Synchro) получит приоритет на ReaderWriterLockSlim, и «Readers» (ваши DataWriters) будут завершены, прежде чем разрешить доступ в режиме «Запись». У вас может быть несколько одновременных режимов «Чтение» (ваши DataWriters), но только один поток exclusivly «Write» (синхронный) режим. – MaLio

0

Похоже, вам необходимо внедрить систему блокировки приоритетов. Есть пример here

Смежные вопросы