Operations should be protected by critical sections (or other means) only if there is a chance of simultaneous access to the variable from different threads. So if one thread perforns Inc(a), and other Inc(b), you don't have to protect anything. But if the both threads performs Inc(a), you should protect the corresponding code. Type of a and b doesn't matter.