Skip to content

Releases: mutable-org/mutable

v0.0.174

28 Jan 19:23
f2ef034
Compare
Choose a tag to compare
[CMake] Add option for building w/ ThreadSanitizer

v0.0.173: [Util] Add macro to prevent function inlining.

25 Jan 19:26
8c2a041
Compare
Choose a tag to compare
Some functions should not be inlined, such that they can be called from
the debugger.  Provide `M_NOINLINE` to annotate functions and tell the
compiler to not inline.  This is particularly useful for `dump()`
methods that must be defined in headers, e.g. those of template classes.

v0.0.172: [Util] Close #210: Implement R/W locking.

25 Jan 14:03
f83dbd0
Compare
Choose a tag to compare
Implements a many-readers single-writer locking scheme with the support
for one reader to atomically upgrade to a writer.

Many readers can concurrently read a shared resource.  If a writer wants
to access the resource, it requests a write lock.  Further readers must
wait for the writer to complete.  Still active readers are not
interrupted and must unlock their read locks eventually.  A writer can
then claim the exclusive write lock.

A reader can *attempt* to upgrade to a writer in an atomic operation,
i.e. w/o releasing its read lock first.  However, that operation fails
if another reader has requested an upgrade already and was not yet
granted the write lock.  If the attempt to upgrade fails, the reader
should release its held read lock to prevent deadlocks.  This behavior
is implemented by `reader_writer_lock` and `upgrade_lock`.  Through
direct use of `reader_writer_mutex`, though, one can cause a deadlock.

If the attempt to upgrade fails, and the read lock is consequently
unlocked, the reader can retry by reclaiming a read lock, re-reading the
shared resource, and then reattempting to upgrade.  A good idiom for
this scheme is:

```cpp
m::upgrade_lock lock{rw_mutex, std::defer_lock};
m::write_lock wlock{rw_mutex, std::defer_lock};

do {
    lock.lock();
    // read from shared resource
} while (wlock = lock.upgrade(), not wlock.owns_lock());
// modify resource, that is now exclusively locked
wlock.unlock();
```

It may be simpler to use a single `reader_writer_lock`, but for the sake
of completeness and to mimic STL and Boost, we provide `read_lock`,
`write_lock`, and `upgrade_lock`.

v0.0.171

24 Jan 10:40
6df2e44
Compare
Choose a tag to compare
[Doc] Fix troubleshooting for macOS.

v0.0.170

15 Jan 18:25
Compare
Choose a tag to compare
[API] Split up query execution in multiple steps.

v0.0.169

10 Jan 19:08
Compare
Choose a tag to compare
Repeat query the requested number of times

v0.0.168: [Util] Close #190.

10 Jan 12:25
d749f73
Compare
Choose a tag to compare
- Implement `unsharable_shared_ptr` as requested in #190.
- Provide factory function `make_unsharable_shared` in the spirit of
  `std::make_shared`.
- Add respective unit test.

v0.0.167

09 Jan 11:41
8db6574
Compare
Choose a tag to compare
[meta] Add mutable logo as svg

v0.0.166: [Util] `cardinality_gen` prints sorted output.

06 Jan 15:07
fcd57f6
Compare
Choose a tag to compare
Sort the output JSON table by subproblems.

v0.0.165: [CMake] Fix #191.

06 Jan 13:17
08920fb
Compare
Choose a tag to compare
Correctly invoke the updated `IntegrationTest.py` script by using option
`--builddir`.