cpu cache

Jan 25, 2013 13:59

Как долго времени требуется треду, чтобы увидеть измененное значение переменной, если та была изменена в другом треде?
Сегодня столкнулся с такой ситуацией: два треда перекачивают 10MB из одного массива в другой. Один тред пишет в shared очередь, другой читает из нее. За все время копирования, эти два треда тысячу раз проверяют флажек на закрытие. А флажек устанавливается третим тредом на 250ой милисекунде. Весь процесс копирования занимает 5.5 секунд. Поразительно, он не прерывается и все тысячи проверок не видят измененного значения. Флажек объявлен как volatile.

Update: оказывается, копирование происходило гораздо быстрее (раньше чем пытался прервать), а последующие 5.5 секунд уходили непонятно на что.

volatile, cache, cpu

Previous post Next post
Up