Can Seqlocks Get Along With Programming Language Memory Models?
Keyword(s): Memory models; seqlocks; reader-writer locks; memory fences
Abstract: Seqlocks are an important synchronization mechanism and represent a significant improvement over conventional reader-writer locks in some contexts. They avoid the need to update a synchronization variable during a reader critical section, and hence improve performance by avoiding cache coherence misses on the lock object itself. Unfortunately, they rely on speculative racing loads inside the critical section. This makes them an interesting problem case for programming-language-level memory models that emphasize data-race-free programming. We analyze a variety of implementation alternatives within the C++11 memory model, and briefly address the corresponding issue in Java. In the process, we observe that there may be a use for "read-dont-modify- write" operations, i.e. read-modify-write operations that atomically write back the original value, without modifying it, solely for the memory model consequences, and that it may be useful for compilers to optimize such operations.
Additional Publication Information: To Be published in MSPC 2012: ACM SIGPLAN Workshop on Memory Systems Performance and Correctness
External Posting Date: June 06, 2012 [Fulltext]. Approved for External Publication
Internal Posting Date: June 06, 2012 [Fulltext]