It depends on if the compiler will access each byte atomically, or if it needs to read then write a full “word” to write a new value to just one byte.
Most processor have individual byte write instructions, so at the single core level, you should be save. Even a cache won’t get in the way for a single core, as all threads are on the same core, so use the same cache. If the processor needs to read a bigger chunk to update, it does it “under the hood” and the program doesn’t see the problem.
If the processor doesn’t have byte writes (or the compiler doesn’t use them) but does a word read as an instruction, changes a piece, then write the word, you will have problems.
Where you get problems is with multi-core, as core will tend to share memory at the cache-line level, so that would not be safe if the two tasks might be on different cores.