Hans-J. Boehm (HP); Can Seqlocks Get Along With Programming Language Memory Models?; Technical Report HPL-2012-68, Hewlett-Packard; 2012-06-06; ; In Proceedings of ACM SIGPLAN Workshop on Memory Systems Performance and Correctness (MSPC 2012); 9 pages.
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.