On Wed, Dec 10, 2014 at 7:21 PM, Howard Chu <hyc(a)symas.com> wrote:
Interesting. The downside of your semaphore suggestion on Windows is that
means any thread can also unlock it, regardless of current owner. This is
also detected as an error in POSIX mutexes.
Yeah, if we used semaphores, we might also wish to track transaction-object
IDs (as a replacement for thread IDs) so we can perform our own safety
checking. Gaining more control over the mutex model could be useful in
other ways, e.g. supporting high priority writes.
OTOH, I want to move on to using LMDB, rather than working on it. My
Haskell bindings to LMDB  are now in a usable condition, albeit only at
the lowest level. You can add it to the list. :)
LMDB is documented to be a single-writer design. I don't see any sane way
for us to support M:N threading models ourselves; not portably to all the
possible runtimes out there. I suggest you wrap your own mutex mechanism
around your wrapper for mdb_txn_begin().
That was my conclusion, too. And it's what I'm doing at the moment.