Software implemented PLLs for signal synchronization, why use them?
For very high SNR signals locating the zero crossings will work pretty well.  You use PLL's when the signal doesn't have a high SNR, like the following.



As you can see by inspection, a zero-crossing algorithm wouldn't have a prayer of working on this signal.  A PLL, on the other hand, could do just fine.  That is, by the way, a tone with an SNR of 8 dB.