A memory coherence protocol is provided for using cache line access
frequencies to dynamically switch from an invalidation protocol to an
update protocol. A frequency access count (FAC) is associated with each
line of data in a memory area, such as each cache line in a private cache
corresponding to a CPU in a multiprocessor system. Each time the line is
accessed, the FAC associated with the line is incremented. When the CPU,
or process, receives an invalidate signal for a particular line, the CPU
checks the FAC for the line. If the CPU, or process, determines that it
is a frequent accessor of a particular line that has been modified by
another CPU, or process, the CPU sends an update request in order to
obtain the modified data. If the CPU is not a frequent accessor of a line
that has been modified, the line is simply invalidated in the CPU's
memory area. By dynamically switching from an invalidate protocol to an
update protocol, based on cache line access frequencies, efficiency is
maintained while cache misses are minimized. Preferably, all FACs are
periodically reset in order to ensure that the most recent cache line
access data in considered.