Caches is a type of memory tightly coupled to the processor. It main aim is to reduce the average memory access time for processors by holding relevant copies of the main memory that can be accessed fast. When an instruction accesses data in the memory and this data can be found in the cache because it has been stored into the cache at some earlier point, it is considered as a cache hit and the processor can access the data fast. When the data cannot be found in the cache, it is considered as a cache miss and the data has to be accessed in the main memory. A cache coherence problem occurs when data in main memory is changed while the copy in the cache remains the same. In this case reading the value from the cache would result in a wrong and outdated value. Thus in terms of processor communication there has to be a mechanism that detects this and acts accordingly.