> From: Taylor R Campbell <campb...@mumble.net> > Date: Thu, 20 Aug 2015 16:57:25 +0000 > > [...] > The safe way to do this is: > > (let ((p (cons item constant-space-queue))) > (membar-write) > (set! constant-space-queue p)) > > (let ((queue constant-space-queue)) > (membar-read) > (if (and (not (eq? '() queue)) > (not (object-constant? queue))) > ...read (car queue) and use it...)) > > [...] > > A little more broadly, my point is that if you're going to skip a > lock, then the burden is on you to prove that it's safe, either by > inserting appropriate memory barriers or showing a convincing argument > that they're not necessary.
I think I see now. Thanks for the explanation. I actually just locked up writers. I WOULD like to accommodate multi-core Alphas and other unicorns. To make this accommodation I just need to add a "matching" membar-read to the readers, and a membar-write to the constructors? The writers, using pthread_mutex_unlock, are already flushing cache? Thus the incoherent core will invalidate its cache and subsequently read new values recently written by another core that flushed its incoherent cache with a "matching" membar-write? 6 or 8 web sites and a chapter or three from the IA-32/64 architecture manual and I'm only sure that... unicorns are rather magical. I was just trying to banish without-interrupts so I can multi-process on an IA-32/64. The burden of a serious review for "naivete" in the runtime system I'm just going to leave where you dropped it. Actually I tried to make another review of all 26 or so files (those that had fiddled the interrupt mask) but sailed quickly into a raft questions I think the owner of a unicorn might want to answer. That may be ME next month (given a unicorn of the ARMv8 running Ubuntu variety). Anticipating that possibility, I expect it would be nice to audit the code with a firm set of rules, as you began, but I would like to pursue that in another thread, and finish addressing your concerns here. > As long as that's an intentional change that has only trivial adverse > consequences, that's OK. But I wonder how much space it takes up on, > e.g., i386. In i386/all.com: 556 words. I got that from evaluating (* 2 (length constant-space-queue)) in the (runtime garbage-collector) package. Constant space itself is 11.8 MiW (mebi-words [retch]) according to (constant-space/in-use) so... ya, totally worth it. _______________________________________________ MIT-Scheme-devel mailing list MIT-Scheme-devel@gnu.org https://lists.gnu.org/mailman/listinfo/mit-scheme-devel