A key thing about the MSI protocol is the idea of exclusive access on writes but possible shared access on reads. This means that increasing the proportion of reads/writes that are reads is helpful for performance. So, for instance, for a conditional atomic write, we would usually prefer to check the condition non-atomically before running the atomic conditional write because then, if the condition fails, we don't need to access the value exclusively, reducing invalidations and, therefore, coherence traffic.
A key thing about the MSI protocol is the idea of exclusive access on writes but possible shared access on reads. This means that increasing the proportion of reads/writes that are reads is helpful for performance. So, for instance, for a conditional atomic write, we would usually prefer to check the condition non-atomically before running the atomic conditional write because then, if the condition fails, we don't need to access the value exclusively, reducing invalidations and, therefore, coherence traffic.