moved assignment of last_worker into crit. section
use atomic head/tail pointer in prod/consumer list

this patch makes the head and tail pointer of
util::producer_consumer_list atomic in order to have
a thread-safe implementation of the empty() member function