We use Visual SourceSafe, and we disallow simultaneous updates, also.

One person checks it out at a time.

However, when I worked on the mainframe, we wrote our own source control system and here's what IT did.

1. When subsequent persons checked out the program, they would be subscribed to a list of updaters, the program would be checked out, but it would e-mail (publish) to all current "users", that another user had the file also.
2. When any other person checked in, un-did checkout, etc., it would email the list of persons who had checked out the file. It was publish/subscribe, or rather subscribe/publish.
3. Also, remember this was mainframe days, it would notify all subscribers when you changed the version of the program to the primary test system, or to any of the departmental test systems. It tracked program versions on some 120 working test subsystems, called "virtual machines" back then.
4. This was a lifesaver, because you alway knew exactly who else was working on the same code as you, and you "worked it out".
5. Each version of a program module was tracked through the heirarchy of test systems, until it was finally put into the production system, in SABRE.
6. Finally, this was all done in 1986 in VM and Profs for 370 Assembler Language computer systems, over 15 years ago. It's still in use at SABRE/EDS/American Airlines, and I haven't seen a better system, yet.

It was called AIS, written by three programmers at American, and I'm not even sure one of them had a college degree.