The sharing list is cleared. One obvious optimization is to have the old owner send the data directly to the new owner on a write miss. This can be done either instead of or in addition to writing the data to the home. This is fine, since the cache will simply ignore invalidate messages for blocks that are not currently cached. But that is probably not as bad as having the remote caches send a message each time they replace a block.
Synchronization Deciding the order of accesses in a distributed memory system is much harder.
Without a shared bus, it is impossible to tell which writes come first. It is not feasible to stall all accesses until a write completes. Often, this can be handled by requiring all writes to be atomic . But doing so slows down the system greatly.