[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multithread facilities under Linux




On Thu, 1 Apr 1999, Daniel Feiglin wrote:

> I'm rather busily tring to find my feet in Linux from OS/2 Warp 4. I just
> wrote a samll c server / Java client on Warp, using tcp/ip domain sockets. The
> c programme has (for now) one thread. The main programme creates an event
> semaphore and does a _beginthread(). It posts the semaphore after getting "the
> nod" from the Java client. The thread then does its stuff, resets the
> semaphore and blocks until the next "nod". It's as simple as that.

you'd probably want to go out with using some pthreads library on linux to
create multi-threaded programs. you'll also want to dump the usage of the
semaphore, and use a mutex instead (man pthread_mutex_init). its overhead
is much smaller then that of a semaphore, and it's cleaner to use.

> I naturally asked myself how would I do that under Linux. And further, how
> would I do it for two or three threads.  All this is not academic, since I'll
> almost certainly have to provide a Unix (AIX) port in a few months, but
> development under Linux.

(my usuall plug:) i'd suggest you check out my multi-threaded programming
tutorial at http://www.actcom.co.il/~choo/lupg/tutorials/ (choose the
multi-threaded programming from the list) to get a feeling regarding
programming with pthreads. there are also various books about this subject
- check on amazon.com or bookpool.com for more info.

> Here is another one: A few years back I did a citrus packing house production
> line control system.
> I did the job under OS/2 because Windoze couldn't handle the real time stuff.
> It used 3 processes, one multithreaded with event semaphores and timers all
> over the place. Again, I'm asking myself, how if at all,I would go about that
> sort of thing under Linux.

by default, unix's timers are NOT real-time. however, there are extentions
for linux that add some real-time support (including real time
scheduling). i think that reading the man pages of 'sched_setscheduler'
for information about setting scheduling policies, and references to
other relevant manual pages.

> So, why do I care how it's done: The way you use clone() as compared toOS/2
> _beginthread() influences programme design. Let me make it even messier: How
> do you want to spin off a thread with visual objects in a X-Motif app? I do it
> under OS/2 PM with _beginthread() and it's far from plain sailing.

don't use clone() directly. if you use any pthreads library, it'll call
clone() for you, and this will make your program (more or less) portabl
across various POSIX conforming OSes (i.e. most modern unices).

as for X-Motif, you need to make sure that you have thread-safe libraries
(especially a thread-safe Xlib library). If not, then your only work
around is to make sure that only a single thread accesses any X functions
at a given time (e.g. by using a mutex to protect accesses to X funcitons,
or by making all calls to X functions be done from a single thread only).

note: i haven't yet tried writing a multi-threaded X program, so i don't
have real experience with that.

hope this helps,

guy