Re: Pollable Semaphores

From: Davide Libenzi
Date: Fri Jan 21 2005 - 19:16:59 EST


On Fri, 21 Jan 2005, Brandon Corey wrote:

> I'm trying to find out if there is a pollable semaphore equivalent on Linux.
>
> The main idea of a "pollable semaphore", is a semaphore with a related
> file descriptor. The file descriptor can be used to select() when the
> semaphore is acquirable. This provides a convenient way for users to
> implement code synchronization between threads, where multiple file
> descriptors are already being selected against.
>
> We have a pollable semaphore implementation on IRIX that provides this
> functionality. The API consists of a handful of calls for creation and
> destruction of pollable semaphores, as well as a means to attach them
> to a file descriptor. Beyond that, from the users point of view, they're
> just treated as any other file descriptor.
>
> These calls are routed through a library and then passed off to a kernel
> driver that handles the events. If someone selects against a semaphore
> when it's unaquirable, the driver sleeps on a synchronization variable.
> When the semaphore is subsequently made aquirable, the driver will wake up
> any waiters. Multiple pollable semaphores mixed with other file
> descriptors can be selected against, and a wakeup will occur when any of
> the semaphores become acquirable.
>
> Is anyone aware of any equivalent functionality?

I used pipe-based semaphores when I need that functionality (call psem_down_fd()
to get the pollable fd):

http://www.xmailserver.org/pipe-sem.c
http://www.xmailserver.org/pipe-sem.h

They have the problem of the maximum pipe buffer size that affects the
maximum count, but in my case it was fine. Or at least bugs did not come
biting me at the time ;)



- Davide

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/