I ran into a high CPU problem on our production server last week. (DNN version 6.2.5). The problem did not manifest itself on our test-server, nor in our development environments. There also seemed to be no relation between the number of requests and the probability of the problem occurring.
I made dumps using DebugDiag and the (32 bit version of) taskmanager. Analyses of the dumps with WinDbg showed all of the runaway threads busy with an Insert call on a generic dictionary in the UserController.GetCachedUser method.
This method indeed gets a dictionary from the cache and sets a value on it. The dictionary is a common generic dictionary, not thread-safe. However the object is shared among threads through the cache, and thus a thread-safe dictionary should be used.
I have fixed this by changing line 242 in method UserController.GetUserLookupDictionary so that the CBO.GetCachedObject overload with the saveInDictionary parameter is used, having set the saveInDictionary parameter to true.
So far, the high CPU problem has not returned in the past 24 hours. Before the fix, the problem would manifest itself one or more times per hour. The fix does not seam to have had any adverse effects on performance or otherwise.