Tieing locks to data is not a new concept. Java provides an intrinsic lock on every object (along with special syntax around acquiring/releasing this lock)
It's not new at all. It goes back to Brinch Hansen and Hoare in the early 1970s.[1] Modula and Ada had it. But the C/C++ crowd tends not to know about it, because Unix and C did not originally have threads and concurrency was a retrofit.