Date: Sat, 29 Mar 2008 10:13:28 +0100 From: Hans Petter Selasky <hselasky@c2i.net> To: freebsd-arch@freebsd.org Cc: arch@freebsd.org Subject: Re: timeout/callout small step forward Message-ID: <200803291013.28797.hselasky@c2i.net> In-Reply-To: <20080328202602.N72156@desktop> References: <10004.1205307334@critter.freebsd.dk> <20080312152744.I29518@fledge.watson.org> <20080328202602.N72156@desktop>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi,
How does this patch handle when multiple callouts use the same mutex ? Imagine
that two threads are about to lock the same mutex, then the second thread
will get nowhere while waiting for the first thread to execute the callback.
I think the solution is that callbacks are put in a tree. Giant locked
callbacks go all into the same tree. Else the user of callouts is responsible
for making up the tree.
struct callout {
struct thread *exec_td;
struct callout *parent;
};
struct callout *c;
while (c->parent != NULL) {
c = c->parent;
}
if (c->exec_td != NULL) {
callout should go into the same thread;
} else {
pick the next free thread and set "c->exec_td"
}
Callouts that belong to the same tree are run from the same thread. This does
not only apply for callouts, but also multithreaded node systems ...
Yours
--HPS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803291013.28797.hselasky>
