I agree that children should be allowed to have some special toys that they don't have to share. Those could be left in a room.
I think that whoever had it first should get to play with it. My sisters' girls are very bad about taking from my son, and he's been taught not to hit them (which is what they do to him). Now when he takes from his little sister, I point out how he feels when cousins take from him. It's helped!
I DON'T think sharing means that one person has to give up a toy for another person. I think there are many levels of sharing (you get to play with something similar to mine, I play with it first then give it to you, we play together) but just having to "give it up" is NOT sharing in my opinion.
2 and 4 are close in age, but still very far apart developmentally. The 4 year old is learning how to play with others, while the 2 year old is mostly capable of parallel play (playing alongside another but not truly playing with them) so the idea of sharing is difficult. Model it for them by playing with them. Show them (by being in their positions) what possible ways they can share.
Some toys can be personal, and I think that's ok, but most should probably be communal. It's not fair to not allow them SOME things that are their own, especially if they have their own rooms where things can be stored. We do the "if it's special and you don't want to share it, then don't bring it around others" idea (mostly with cousins, but I tell my son that too). If it's something soooo special (like a lovey) that they don't to share, fine, but don't bring it out when others are around.
Model the sharing/playing together, but I think it's totally normal if they DON'T want to play together. I read another posters idea about a timer. Perhaps that would help your little ones too.