On Wed, 2 May 2018, Tuzun, Robert wrote:

Suppose a user of the class wanted to set or retrieve element n.
This could be done by setting or retrieving bit n%8 of Bytes[n/8].

From the previous email's remarks about race conditions, this would
be thread-safe, correct, even when writing to?

Nope.  This is basically how vector<bool> already works under the hood.

The race condition happens when trying to set or retrieve that bit:
you look at the current byte, you OR that bit to 1, and you write the
result, right?  Nope.  Because if *another* thread tries to do the
same thing, and both look at the current byte at the same time, then
neither thread gets the set-to-1 version from the other thread, and
only one or the other write actually occurs.

There's probably some std::atomic way to fix this but nothing I'd feel
safe trying to futz with, and even a perfect fix would necessarily
ruin caching and thus speed.
---
Roy

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to