Multi producer/consumers lockfree list
Problem with pop
Your pop() function could return false when there are still elements in the list.  The problem is with this check:

      if(!lcl_ptr.s.ptr || _head == _tail) {
          return false;
      }


Here, lcl_ptr.s.ptr could be NULL if some other thread just popped that element.  If that happens, you should just move on to the next element instead of returning false.  So for example:
      if (_head == _tail) {
          return false;
      }
      if (!lcl_ptr.s.ptr) {
          continue;
      }

This solution spins until the other thread finishes incrementing the head pointer.  There may be better ways of handling this case which involve searching forward for an element to pop.