Hello.

I'm wondering if CONFIG_SERIALIZED is a superset of CONFIG_MULITHREAD, 
recursive mutex wise.

I imagine MULTITHREAD is turning on mutexes to protect the pager and other 
"low-level" execution stuff, and SERIALIZED is turning on more mutexes to 
protect stuff hanging off the connection, like the parser and vdbe code 
generator.

The reason I ask is that I had this great system where I was running 
MULTITHREAD and was giving each thread its own handle via a "handle cache" that 
examined characteristics of the current thread to decide which handle to hand 
out when a open was requested. However, with the rise of Grand Central Dispatch 
and anonymous block execution on iOS and OS X, the threading model has become a 
complete circus and also, certain calls I have used in the past to do my cache 
magic have been deprecated -- the result is that the cache is getting fooled 
and passing the same connection handle to more than one thread (on rare 
occasions) and BOOM!

So...the easiest fix is to just switch to SERIALIZED. But I want to be sure I 
can still (mostly) have separate connections for each thread, but 
*occasionally* have more than one thread on the same connection. That is, I am 
assuming is not a requirement of SERIALIZED that ALL threads come banging in on 
a same global connection. (I mean, I've already thrown the switch and it seems 
to work, but thought I'd also ask to see if I'm missing anything.)

Someday, of course, I'll rework the handle cache...."when I have time" (yeah, 
right).

-- Ward



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to