When should I use shared lock over exclusive lock?
In general you should not worry about such.  This pattern covers most common cases adequately.

BEGIN;
SELECT ... FOR UPDATE; -- touch the rows you _might_ update
do some stuff
UPDATE ...;    -- then update them (or not)
COMMIT;


Note that shared locks get 'promoted' in some circumstances for you.

If you would like to explain your situation we can be more specific.