Thread-Level Parallelism: A Focus on Cache Coherence