Здравствуйте, McSeem2, Вы писали:
MS>Как мне сделать такой хитрый лок? Один тред — важный, другой — вспомогательный. Важный тред никогда не должен ждать вспомогательный. Наоборот, вспомогательный тред всегда обязан ждать, пока не выполнится некая критическая функция важного. Функция быстрая, поэтому на вспомогательном треде можно обойтись спин-локом. Подозреваю, что на атомик-операциях должно быть очень просто, но я в них не разбираюсь.
Если "важный" не ждет то что должно происходить если "важный" пишет в то время когда "вспомогательный" читает?
Самое простое и надежное это сократить время чтения "вспомогательным" данных.
Т.е. это все та же critical section на общий блок данных только вспомогательный для чтения делает локальную копию блока. А потом уже спокойно разбирается. В любом случае "важный" тред будет останавливаться, хотя бы для того чтобы дать поработать "вспомогательному". Тогда какая разница когда он это будет делать?