Messages in this thread | | | From | Bryan Donlan <> | Date | Wed, 26 Aug 2009 12:32:51 -0400 | Subject | Re: Suspend one thread and resume another in one system call ? |
| |
On Wed, Aug 26, 2009 at 12:02 PM, Nikita V. Youshchenko<yoush@cs.msu.su> wrote: > Hello. > > Consider a situation when: > - there is a set of threads, > - only one of those should be allowed to work at a time, > - there are "switch moments" when one thread should suspend, and other > (known) resume. > > "Classic" solutions like have each thread sleeping on a semaphore, and > making switch operation "sem_post(next_sem); sem_wait(my_sem)" cause two > syscalls per switch. > > Could anyone suggest a solution with only one kernel entry per switch - > running thread enters kernel and is de-scheduled, new thread resumes and > leaves kernel? > > Nikita > > P.S. > Since there are other threads in the same application working in the > parallel with the mentioned "exclusive set", user-space solutions like > libpth are not interesting.
If these threads are truly exclusive, just use ucontext.h's setcontext() to switch threads in userspace.
| |