diff --git a/lru.go b/lru.go
index <HASH>..<HASH> 100644
--- a/lru.go
+++ b/lru.go
@@ -44,9 +44,14 @@ func NewWithEvict(size int, onEvicted func(key interface{}, value interface{})) 
 
 // Purge is used to completely clear the cache
 func (c *Cache) Purge() {
-	// Evict each element in the list.
-	for c.Len() > 0 {
-		c.RemoveOldest()
+	c.lock.Lock()
+	defer c.lock.Unlock()
+
+	e := c.evictList.Front()
+	for e != nil {
+		n := e.Next()
+		c.removeElement(e)
+		e = n
 	}
 }
Take a single lock to purge the cache.