FGL reduces contention and increase execution overhead.
LF avoid the additional FGL overhead.
LF still have contentions(the while spin).
FGL increases the complexity.
LF increases the complexity by a lot.
While locking isn't required for LF data structures, we still will need memory fences to ensure different threads have updated values when dealing with relaxed consistency memory systems.
Course-grained locks and transactional synchronization are very important concepts. It talks about how Intel TSX allows highly concurrent accesses using only a simple locking mechanism. This is an article by Intel explaining these concepts.