Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 05 Sep 2001 14:47:24 -0700 (PDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        freebsd-hackers@FreeBSD.org, Ullasan_Kottummal@kindlebanksys.com
Subject:   Re: Posix Threading
Message-ID:  <XFMail.010905144724.jhb@FreeBSD.org>
In-Reply-To: <3B967FC1.AEB592D9@mindspring.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On 05-Sep-01 Terry Lambert wrote:
> Ullasan_Kottummal@kindlebanksys.com wrote:
>> 
>> Hi All,
>> I am trying  to create threads under HP-UX 11 using POSIX threads library
>> and
>> using the method pthread_create(...).
>> 
>> But I don't know how can I create a thread in a suspended state.
> 
> First the obligatory "off topic" humor:
> 
> This is not the place to ask about HP-UX programming; you
> probably want the Hewlet-Compaqard user's mailing list... 8-p.
> 
> --
> 
> You don't give us enough information about your application
> for us to tell you the correct approach to building it; you've
> started with a hammer ("initially suspended threads") and are
> ignoring other tools (e.g. "the jaws of life") in your search
> for a way to instance your hammer, under the theory that your
> problem is a nail (it might not be; you've given us no way to
> know).
> 
> Probably switching to FreeBSD and the kqueue interface would
> better match your problem.
> 
> 
> Let's do some setup, and then guess at what you wanted to do,
> and give you several approaches to our satisfying our guesses...
> 
> 
> Short answer: You can't.  The "suspended" state is an attribute
> of the thread that is controlled by the threads scheduler, and
> is not directly controllable by you.
> 
> 
> A thread is guaranteed to be suspended only when it is waiting
> on a mutex, condition variable, or blocking call (such as I/O).
> 
> I suggest you rethink your design.
> 
> 
> If the intent is to get an immediate context switch back to
> yourself, you will need to create a mutex that can not be
> acquired by the newly created thread, and attempt to acquire
> it as the first thing you do.
> 
> You can then immediately release it so as not to block other
> threads trying the same dirty trick.  Note that there is not
> an explicit "yield", so you will have to do something like
> this to get a "yield" equivalent.
> 
> 
> Alternately, if the intent is to create threads so that they
> will be around when you need them, you would be better off
> delaying their creation until you need them.  The expensive
> part of threads creation is _supposed_ to be the allocation
> of the stack; so if you keep a pool of preallocated stacks
> lying around for your use, you will get only a small startup
> latency.
> 
> If the intent is to have "a pool of idle threads", ready to
> go when you get request traffic, and get around the latency,
> well, you'd do a lot better in the latency department if you
> went to a finite state automaton, instead of messing with
> threads.  But if you insist, the best you are going to be
> able to get is use of a mutex, since a condition variable will
> result in a "thundering herd" problem.  You will still have to
> eat the latency for the mutex trigger to the thread you give
> the work to, however (this is how I designed the work-to-do
> dispatcher in the Pathworks for VMS (NetWare) product for DEC
> and Novell).
> 
> If the intent is a "horse race", where you create a bunch of
> threads, and then open the "starting gate" and have them all
> start going ``at once'', then you want a condition variable.  I
> intentionally quoted ``at once'', since the concurrency will
> not be real without multiple CPUs and cooperation from the OS,
> it will be virtual -- just as if you were running multiple
> processes, instead of trying to use threads.  This is an
> artifact of the scheduler, and varies from implementation to
> implementation.
> 
> Note: I don't know what level of standards compliance the
> HP-UX 11 version of pthreads has achieved; some of the things
> described above are probably not going to be easy to achieve
> in downrev versions of the library.  Last time I looked, the
> HP-UX version of pthreads was a Draft-4 version, not a Draft-10
> or standard version, so you may be in more trouble than you
> originally thought; specifically, you will have a problem with
> creating a preinitialized mutex in a Draft-4 version of pthreads,
> so you will have to create the mutex (if you use one) first.
> 
> -- Terry
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message

-- 

John Baldwin <jhb@FreeBSD.org> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.010905144724.jhb>