So on line 78: I don't see the reason for usedForkLast?
I would have expected a process like this:
-> acquire mutex (WaitForSingleObject(...) in your case)
-> depending on the availability of the forks either the state remains HUNGRY or changed to EATING
case EATING -> random sleeping -> put forks back -> change state to THINKING [or TALKING] -> random sleeping
case HUNGRY -> short sleeping