I am currently studying concurrent systems, and I've become a little confused with the concept of cache coherency when working with multiple threads and multiple cores at the same time.
Some assumptions as I understand:
Cores have caches
Cores may have multiple threads at one time (if hyperthreaded)
A thread is a single line of commands that are getting processed
Thus, threads are not physical hardware and threads don't have caches and use the core's cache