Unfortunately the code does not function that way on my machine.  The code 
contrary to Brian's snipe is mine and was used in a demo of pthreads for my
class.  It works fine under multiple version of Unix and Linux but does not
work on my Windows XP Pro machine under cygwin.  What I get is the following
output.


/lab4/ $ lab4_1
waiting do_one_thing
waiting do_another_thing
Ready to start threads ..... 
&Starting ... do_one_thing
Starting ... do_another_thing
+-+-+-+-+-+-+-+-++-++++-++--+-+-+-+-----+--+++-++++++--+-+-+-+-++-+-++-+-+-+-+-+-+-++++-+-+-+-+-+-+-+-+--+--+++++-+-+-+++-+-+-+-++-+-+++-+-+-+-++++++-+-++-+-+-+-+-+-+-+-++-++@(!(/lab4/
 $ 

If I uncomment the sleeps in the two threads and comment out the pthread_join
calls I get the following out as I would expect.

/lab4/ $ lab4_1
waiting do_one_thing
waiting do_another_thing
Ready to start threads ..... 
&Starting ... do_one_thing
Starting ... do_another_thing
+-+-+-+-+-+-+-+-+-+-+-+++-+++-+-++-++-++-+-+-++++--++---+--+-++---++-+-+-++-+-+-+++++-++++--+-+-++-+-++-+--+-+-+-+-+-+-+++++-+-++++-++--+-+-+-++-+-++-+++-+----++-+--+-+-++-++@(!(#&--------------------------@)#^
All threads complete

wrap up: doing another 100, another 100, total 200
!)
/lab4/ $ 


As noted the code as attached does not compile but the missing header file
only contained the  following code:

/*

    Common Local Header File: local_mutex.h

*/

#ifndef LOCAL_MUTEX_H
#define LOCAL_MUTEX_H
#define _REENTRANT
#include    <pthread.h>
#include    <stdio.h>
#include    <stdlib.h>
#include    <unistd.h>
#include    <sys/types.h>
#include    <sys/time.h>
#include    <sys/wait.h>

#endif


So adding pthread.h was all that was needed.  Since others have added the output
as I would expect I am assuming that the problem is in my cygwin environment. To
confirm that nothing I had added was causing this issue I removed my local_mutex.h
include and just used pthread.h.  The following is the output:

/labs/lab4/ $ make lab4_1
gcc -c -pg -g -Dcygwin -I ./inc/ lab4_1.c
gcc -pg -o lab4_1 lab4_1.o 
/labs/lab4/ $ lab4_1
waiting do_one_thing
waiting do_another_thing
Ready to start threads ..... 
&Starting ... do_one_thing
Starting ... do_another_thing
+-+-+-+--+-+-+-+-+-+--+-+-------+++++--+-+-+-+-+-+-----+---+--++-+-+-+-+-+-+-+-+--------+-+-+-+-+-+-+-++++-+-+-+--+-+-+-+-----+++++++--++++-++-----+---+-+-+-++--+-+-++-+-----+--+-@)!)+/labs/lab4/

Running this application in the Unix (AIX, Solaris, HP/UX, SCO, DigitalUnix) and
Linux (Red Hat 7.3, Slackware, Debian, Fedora Core 2) produces the correct output
so I am trying to find out what in my environment produces the incorrect
behavior.  I had made the rash assumtion that others testing this code in a basic
cygwin environment would encounter the same errors as I was seeing but the output
So far shows that is not the case.



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Reply via email to