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>