IMO, you’re both right. With a simple monitor architecture, recursive re-entry 
is as legitimate as having exposed APIs that are also useful internally as 
building blocks for more complex transactions. Simple solutions for simple 
problems. In a more complex architecture, you want to keep closer control over 
what’s held when and crash proactively if your presumptions are violated e.g. 
by re-entry. Taylor’s latest patch lets the dev choose, which is how it should 
be!

 

(Mind, locks are still horrible, horrible things. The first thing I usually do 
is write a better set of abstractions suited to the problem at hand. …maybe I 
should package some of those. ;)

 

--Micah

 

From: mit-scheme-devel-bounces+micahbro=csail.mit....@gnu.org 
[mailto:mit-scheme-devel-bounces+micahbro=csail.mit....@gnu.org] On Behalf Of 
Arthur A. Gleckler
Sent: Tuesday, June 09, 2015 1:05 AM
To: Taylor R Campbell
Cc: mit-scheme-devel@gnu.org
Subject: Re: [MIT-Scheme-devel] non-recursive mutexes

 

On Monday, June 8, 2015, Taylor R Campbell <campb...@mumble.net> wrote:

 

   The log file is specific to the particular web server instance, so the lock
   that controls the log file belongs in the web server data structure.
   Having two locks opens the possibility of ordering problems.  Having just
   one eliminates that issue.

Only if your logging routines need to get at the rest of the web
server data structures.  If your logging routines are self-contained,
the lock ordering issue is trivial and needn't even be mentioned --
you could factor logging out into another library, like C stdio.

 

Still, when logging is used in the web server, the lock needs to reside 
somewhere.  It shouldn't have to be passed around separately from the web 
server, so I just incorporated it into the web server.

 

(C stdio streams have locks too -- but you don't usually notice, even
if you call printf while you hold some pthread_mutex, because you
~never have to write code that runs with the stdio stream locked.)

 

Interesting.

 

I'm not sure what interactions might happen at the Scheme level, though.

_______________________________________________
MIT-Scheme-devel mailing list
MIT-Scheme-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/mit-scheme-devel

Reply via email to