[concurrency-interest] Stupid Question

Nathan Reynolds nathan.reynolds at oracle.com
Tue Feb 12 16:00:13 EST 2013


this.lock is a memory indirection (i.e. dereferences "this" to get the 
value in "lock") and could incur a cache miss (i.e. loads 
ArrayBlockQueue into the L1 cache) or even worse false sharing.  By 
copying to the local variable, the value is on the stack.  There won't 
be any memory indirection to access the value.  Cache misses would only 
happen if the thread context switched.  False sharing is impossible.

Nathan Reynolds 
<http://psr.us.oracle.com/wiki/index.php/User:Nathan_Reynolds> | 
Architect | 602.333.9091
Oracle PSR Engineering <http://psr.us.oracle.com/> | Server Technology
On 2/12/2013 1:41 PM, javamann at cox.net wrote:
> Stupid question time. While going through the code for an ArrayBlockQueue I came across numerous instances where the instance 'lock' is copied to a variable in a Method. I know there is a reason for this, I just don't know what it is.
>
> Thanks
>
> -Pete
>
>      public int remainingCapacity() {
>          final ReentrantLock lock = this.lock;
>          lock.lock();
>          try {
>              return items.length - count;
>          } finally {
>              lock.unlock();
>          }
>      }
>
> _______________________________________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/concurrency-interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20130212/180afa0d/attachment.html>


More information about the Concurrency-interest mailing list