According to Chris Spear's System Verilog for Verification. It's mentioned that Clocking blocks are used to create the synchronization between DUT and TB signals. In the next section, inside Program block the same statement is mentioned that program blocks are used to avoid race condition between DUT and TB. The basic difference between CB and Programming block is that CB runs in Observed region and PB runs in Reactive. These things I know.
So my question is, can someone tell me the application difference between CB and PB. Also, most of the EDA Vendors' guidelines say that "Do not use PB". what is the reason for that.