TOTALLY normal. Sharing and empathy are both things that are taught.
"Mine" is a toddler/young child phase that ALSO stems from learned behavior. "No, don't touch mommy's computer." "Nope, that's mine, here's yours." "No that's daddy's coffee... here's your milk."
We TEACH young children over and over and over that things "belong" to certain people, and that we don't touch, can't have, here's YOURS... we do it 1000x a day... from food, beds, clothes, makeup, sharp knives... things that are either differentiated into mine, yours... OR that certain things are *completely* out of bounds for YOU (cooking, driving, discipline, tools, lightbulbs, etc.). It's COMPLETELY natural that they learn and copy those behaviors by making their things as "inviolate" as our things that we don't let them have. This is MINE, don't touch.
What *I* did was to allow my son certain things that WERE inviolate. No matter who asked to have them, he could happily say no and have that backed up. Special things. The rest was up for grabs as long as it was shared... and if there was ANY fighting over it "it" went away... right up until my son figured out he could start a fight to get the other kid's hands off of the thing he didn't want to share. Then it became more complicated. As in HE would go on timeout instead of the toy. But that phase was shortlived.
From a practical standpoint... have your son *pick out* certain toys to share with guests. Make sure those are out and special things are put away. If he starts getting posessive about the things that he got out to share, remind him that those are sharing toys, and that he chose to.