Быстрый вопрос, который меня интересовал в течение некоторого времени; Присваивает ли ЦП значения атомарно или побитно (скажем, 32-битное целое число).
Если побитно, может ли другой поток, обращающийся к этому точному местоположению, получить «часть» будущего? присвоенное значение?
Подумайте об этом:
У меня есть два потока и одна общая переменная "unsigned int" (назовите ее "g_uiVal").
Оба потока зацикливаются.
On печатает "g_uiVal" с помощью printf("%u\ n", g_uiVal).
Во втором случае просто увеличьте это число.
Будет ли поток печати когда-либо печатать что-то, что полностью не соответствует значению "g_uiVal" или является его частью?
В коде:
unsigned int g_uiVal;
void thread_writer()
{
g_uiVal++;
}
void thread_reader()
{
while(1)
printf("%u\n", g_uiVal);
}