The document discusses two solutions to classic concurrency problems:
1) An unbounded buffer problem is solved using locks on an array to control a producer and consumer thread. The array tracks items and locks ensure only one thread accesses it at a time.
2) The dining philosophers problem is solved by having philosophers randomly wait before acquiring both forks, to avoid deadlock. Locks ensure at most two philosophers can try to acquire forks at once.