Re: Односторонний лок
От: c-smile Канада http://terrainformatica.com
Дата: 15.07.10 23:36
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Как мне сделать такой хитрый лок? Один тред — важный, другой — вспомогательный. Важный тред никогда не должен ждать вспомогательный. Наоборот, вспомогательный тред всегда обязан ждать, пока не выполнится некая критическая функция важного. Функция быстрая, поэтому на вспомогательном треде можно обойтись спин-локом. Подозреваю, что на атомик-операциях должно быть очень просто, но я в них не разбираюсь.


Если "важный" не ждет то что должно происходить если "важный" пишет в то время когда "вспомогательный" читает?

Самое простое и надежное это сократить время чтения "вспомогательным" данных.
Т.е. это все та же critical section на общий блок данных только вспомогательный для чтения делает локальную копию блока. А потом уже спокойно разбирается. В любом случае "важный" тред будет останавливаться, хотя бы для того чтобы дать поработать "вспомогательному". Тогда какая разница когда он это будет делать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.