Lock elision changes the definition of "uncontended", though. Before, "uncontended" meant "you don't have any parallelism", as you suggested. With lock elision, "uncontended" means "doesn't have multiple accesses to the same data, or they're all reads"; that allows quite a bit of parallelism on most data structures.