This is the mail archive of the pthreads-win32@sources.redhat.com mailing list for the pthreas-win32 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: mingw and pthreads help !


Hi,

That's my fault. I forgot to include gcc.dll in with the
pre-built pthreads dlls. I've just uploaded it to

ftp://sources.redhat.com/pub/pthreads-win32/pthreads-dll-2000-12-29/

I hope that's all that's needed. Later I'll include it in the
corresponding self-unpacking zip exe at

ftp://sources.redhat.com/pub/pthreads-win32/pthreads-2000-12-29.exe

Apologies.
Ross

Gabriel L Somlo wrote:
> 
> Hi,
> 
> I am trying to compile an example c-program using pthread rwlocks on
> Windows, using mingw gcc-2.95.2, the crtdll version (the msvcrt version
> gives me the exact same problem). When I finish compiling, after some
> warnings, and try to execute the .exe file, I get a popup error window
> which says the "gcc.dll" file could not be found (this only happens with
> the pthreads program -- a simple hello-world program compiles and executes
> fine).
> 
> Also, if I don't define _MSC_VER I get a parse error when including
> pthread.h
> 
> Can anyone please help me figure out what I'm doing wrong ?
> 
> Thanks,
> 
> Gabriel
> 
> PS. Here's what I've done:
> 
> I've unpacked all the pthread-w32 dll's, libraries, and include files into
> a directory named c:\pthrw32, which is also added to the path of the shell
> program used to start mingw (mingw32.bat):
> 
>         REM
>         REM ...<snip>
>         REM
>         PATH=c:\gcc-2.95.2-crtdll\bin;%PATH%
>         REM add pthread dll directory to path variable
>         PATH=c:\pthrw32;%PATH%
> 
>         REM start shell
>         cmd.exe
> 
> This is what I did in the resulting command window on Win2K:
> 
>         E:\home\threads>gcc -D_REENTRANT -D_MSC_VER -O -Wall
> -o thrtst thrtst.c -lpthreadw32 -Ic:\pthrw32 -Lc:\pthrw32
>         In file included from thrtst.c:14:
>         c:\pthrw32\pthread.h:1019: warning: `__except' redefined
>         c:\gcc-2.95.2-crtdll\bin\..\lib\gcc-lib\i386-mingw32\2.95.2\..
> \..\..\..\i386-mingw32\include\excpt.h:9: warning: this is the location
> of the previous definition
> 
>         In file included from thrtst.c:14:
>         c:\pthrw32\pthread.h:204: warning: ignoring pragma: )
>         In file included from thrtst.c:14:
>         c:\pthrw32\pthread.h:284: warning: ignoring pragma: )
> 
>         E:\home\threads>thrtst.exe
> 
>         < popup window with message saying that gcc.dll could not be found >
> 
> Here is the silly pthread_rwlock example I'm trying to compile:
> 
> /*
>  *  thrtst.c
>  *
>  *  How to compile:
>  *
>  *  On Solaris:
>  *  gcc  -D_REENTRANT -DSOL_SETCONC=4 -O -Wall -o thrtst thrtst.c -lpthread
>  *
>  *  On Linux:
>  *  gcc  -D_REENTRANT -D_XOPEN_SOURCE=500 -O -Wall -o thrtst thrtst.c -lpthread
>  *
>  *  On Windows (mingw32 - gcc-2.95.2-crtdll):
>  *  gcc  -D_REENTRANT -D_MSC_VER -O -Wall -o thrtst thrtst.c -lpthreadw32 \
>  *  -Ic:\pthrw32 -Lc:\pthrw32
>  */
> 
> #include <stddef.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <pthread.h>
> 
> pthread_rwlock_t rwlock;
> 
> void *reader( void *arg ) {
> 
>   unsigned long int i;
> 
>   pthread_rwlock_rdlock( &rwlock );
>   fprintf( stderr, "--> %s starting to read\n", (char *)arg );
> 
>   for( i = 0; i < 50000000; ++i );      /* reading delay */
> 
>   fprintf( stderr, "<-- %s done reading\n", (char *)arg );
>   pthread_rwlock_unlock( &rwlock );
> 
>   return NULL;
> 
> } /* reader */
> 
> void *writer( void *arg ) {
> 
>   unsigned long int i;
> 
>   pthread_rwlock_wrlock( &rwlock );
>   fprintf( stderr, "==> %s starting to write\n", (char *)arg );
> 
>   for( i = 0; i < 50000000; ++i );      /* writing delay */
> 
>   fprintf( stderr, "<== %s done writing\n", (char *)arg );
>   pthread_rwlock_unlock( &rwlock );
> 
>   return NULL;
> 
> } /* writer */
> 
> int main( void ) {
> 
>   pthread_t r1, r2, w1, r3, w2, r4, wa, ra, wb, rb, wc, rc, wd, rd;
>   unsigned long int i;
> 
> #ifdef SOL_SETCONC    /* set concurrency on Solaris machines */
>   pthread_setconcurrency( SOL_SETCONC );
> #endif
> 
>   pthread_rwlock_init(&rwlock, NULL);
> 
>   pthread_create(&r1, NULL, reader, "reader_1");
> 
>   for(i = 0 ; i < 500; ++i);    /* delay */
> 
>   pthread_create(&r2, NULL, reader, "reader_2");
> 
>   for(i = 0; i < 500; ++i);     /* delay */
> 
>   pthread_create(&w1, NULL, writer, "writer_1");
> 
>   for(i = 0; i < 500; ++i);     /* delay */
> 
>   pthread_create(&r3, NULL, reader, "reader_3");
> 
>   for(i = 0; i < 500; ++i);     /* delay */
> 
>   pthread_create(&w2, NULL, writer, "writer_2");
> 
>   for(i = 0; i < 500; ++i);     /* delay */
> 
>   pthread_create(&r4, NULL, reader, "reader_4");
> 
>   pthread_create(&ra, NULL, reader, "reader_a");
>   pthread_create(&wa, NULL, writer, "writer_a");
> 
>   pthread_create(&rb, NULL, reader, "reader_b");
>   pthread_create(&wb, NULL, writer, "writer_b");
> 
>   pthread_create(&rc, NULL, reader, "reader_c");
>   pthread_create(&wc, NULL, writer, "writer_c");
> 
>   pthread_create(&rd, NULL, reader, "reader_d");
>   pthread_create(&wd, NULL, writer, "writer_d");
> 
>   /* join all threads before exiting */
>   pthread_join(r1, NULL);
>   pthread_join(r2, NULL);
>   pthread_join(w1, NULL);
>   pthread_join(r3, NULL);
>   pthread_join(w2, NULL);
>   pthread_join(r4, NULL);
>   pthread_join(wa, NULL);
>   pthread_join(ra, NULL);
>   pthread_join(wb, NULL);
>   pthread_join(rb, NULL);
>   pthread_join(wc, NULL);
>   pthread_join(rc, NULL);
>   pthread_join(wd, NULL);
>   pthread_join(rd, NULL);
> 
>   /* done */
>   return 0;
> 
> }
> 
> --
> -----------------------------------------------------------------------
>       Gabriel L.  Somlo                 Assistant System Administrator
> 
>  Computer Science Department
>   Colorado State University             e-mail: somlo@cs.colostate.edu
>    601 Howes St. 2nd Floor               phone: +1 (970) 491-5305
>    Fort Collins,  CO 80523
> -----------------------------------------------------------------------
> 
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/

-- 
+-------------------------+---+
| Ross Johnson            |   | "Come down off the cross
| Management & Technology |___|  We can use the wood" - Tom Waits
| Building 11                 |
| University of Canberra      | eMail: rpj@ise.canberra.edu.au
| ACT    2601                 | WWW:  
http://public.ise.canberra.edu.au/~rpj/
| AUSTRALIA                   |
+-----------------------------+


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]