A quick question I’ve been wondering about for some time; Does the CPU assign values atomically, or, is it bit by bit (say for example a 32bit integer).
If it’s bit by bit, could another thread accessing this exact location get a “part” of the to-be-assigned value?
Think of this:
I have two threads and one shared “unsigned int” variable (call it “g_uiVal”).
Both threads loop.
On is printing “g_uiVal” with printf(“%u\n”, g_uiVal).
The second just increase this number.
Will the printing thread ever print something that is totally not or part of “g_uiVal”‘s value?
In code:
unsigned int g_uiVal;
void thread_writer()
{
g_uiVal++;
}
void thread_reader()
{
while(1)
printf("%u\n", g_uiVal);
}
Depends on the bus widths of the CPU and memory. In a PC context, with anything other than a really ancient CPU, accesses of up to 32 bit accesses are atomic; 64-bit accesses may or may not be. In the embedded space, many (most?) CPUs are 32 bits wide and there is no provision for anything wider, so your
int64_tis guaranteed to be non-atomic.