Add some thread-safety guarantees to interface
This commit is contained in:
@@ -27,7 +27,14 @@ namespace weaselab {
|
|||||||
* key and version, and provides an iterator api which can be used to merge
|
* key and version, and provides an iterator api which can be used to merge
|
||||||
* versioned results with an underlying unversioned data structure. @warning you
|
* versioned results with an underlying unversioned data structure. @warning you
|
||||||
* must not apply mutations to your data structure through a version that
|
* must not apply mutations to your data structure through a version that
|
||||||
* overtakes a concurrent versioned reader. */
|
* overtakes a concurrent versioned reader.
|
||||||
|
|
||||||
|
* Thread safety:
|
||||||
|
* - It's safe to operate on two different VersionedMaps in two different
|
||||||
|
* threads concurrently
|
||||||
|
* - It's safe to have multiple threads operating on the same VersionedMap
|
||||||
|
* concurrently if and only if all threads only call const methods.
|
||||||
|
*/
|
||||||
struct VersionedMap {
|
struct VersionedMap {
|
||||||
|
|
||||||
/** Indicates how `Mutation::param1` and `Mutation::param2` are to be
|
/** Indicates how `Mutation::param1` and `Mutation::param2` are to be
|
||||||
@@ -126,12 +133,14 @@ struct VersionedMap {
|
|||||||
|
|
||||||
/** Perform `count` "first greater than or equal to" queries. The result of
|
/** Perform `count` "first greater than or equal to" queries. The result of
|
||||||
* querying `key[i]` at `version[i]` is `iterator[i]`. `version[i]` must be >=
|
* querying `key[i]` at `version[i]` is `iterator[i]`. `version[i]` must be >=
|
||||||
* `getOldestVersion()` and <= `getVersion()`. */
|
* `getOldestVersion()` and <= `getVersion()`. Thread-safe as long as a
|
||||||
|
* version is not concurrently invalidated by `setOldestVersion`. */
|
||||||
void firstGeq(const Key *key, const int64_t *version, Iterator *iterator,
|
void firstGeq(const Key *key, const int64_t *version, Iterator *iterator,
|
||||||
int count) const;
|
int count) const;
|
||||||
|
|
||||||
/** Returns an iterator to the first mutation visible at `version`, or `end()`
|
/** Returns an iterator to the first mutation visible at `version`, or `end()`
|
||||||
* if none exists.*/
|
* if none exists. Thread-safe as long as `version` is not concurrently
|
||||||
|
* invalidated by `setOldestVersion`. */
|
||||||
Iterator begin(int64_t version) const;
|
Iterator begin(int64_t version) const;
|
||||||
|
|
||||||
/** The "past-the-end" iterator. */
|
/** The "past-the-end" iterator. */
|
||||||
|
Reference in New Issue
Block a user