lock the object before checking the data member
use a lockfree queue instead of a locked linked list
switch back to mutexes

the actual arc implementation is too convoluted and can't be made thread safe without the use
of recursive locks.  It needs refactoring and only then it can be done lockless and possibly with
dequeuing/reuse of prealloc'd items.

for the moment this is the safest implementation and the overhead of using mutexes is arguably
noticeable ... at the moment allocations/releases and i/o are the most expensive operations
in all cases.  In regards of i/o there isn't much to do while allocations can be reduced enormously
by using pools of prealloc'd items at both the shardcache (cache_item_t) and the arc level (arc_object_t)