From owner-freebsd-hackers Thu Jan 15 09:10:29 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA11292 for hackers-outgoing; Thu, 15 Jan 1998 09:10:29 -0800 (PST) (envelope-from owner-freebsd-hackers@FreeBSD.ORG) Received: from plains.NoDak.edu (tinguely@plains.NoDak.edu [134.129.111.64]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id JAA11277 for ; Thu, 15 Jan 1998 09:10:03 -0800 (PST) (envelope-from tinguely@plains.NoDak.edu) Received: (from tinguely@localhost) by plains.NoDak.edu (8.8.8/8.8.8) id LAA17795; Thu, 15 Jan 1998 11:09:57 -0600 (CST) Date: Thu, 15 Jan 1998 11:09:57 -0600 (CST) From: Mark Tinguely Message-Id: <199801151709.LAA17795@plains.NoDak.edu> To: freebsd-hackers@FreeBSD.ORG, jacques@oskar.nanoteq.co.za Subject: Re: Pthreads question Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk This semester, a NDSU CS class started to use pthreads. From the last couple days worth of seeing them struggle, it is MHO that libc_r is buggy and old. you may want to get Pthreads 1.8.3 from: http://www.humanfactor.com/pthreads/ it took minor changes to port your example to pthread 1.8.3 (below), but the output was: $ ./xxxpthread 0 [.] [.] $ ./xxxpthread 1 [.] [.] *** xxxpthread.c.orig Thu Jan 15 11:04:01 1998 --- xxxpthread.c Thu Jan 15 11:00:05 1998 *************** *** 11,16 **** --- 11,20 ---- pthread_mutex_t mu; int fin=0; + extern pthread_attr_t pthread_attr_default; + pthread_mutexattr_t pthread_mutexattr_default = { MUTEX_TYPE_FAST, 0 }; + pthread_condattr_t pthread_condattr_default = { MUTEX_TYPE_FAST, 0 }; + void fg(void) { struct timespec ts; *************** *** 46,63 **** if (argc<2) exit(1); ! pthread_mutex_init(&mu,pthread_mutexattr_default); ! pthread_cond_init(&co,pthread_condattr_default); ! pthread_create(&th,pthread_attr_default,(void *)bg,NULL); if (argv[1][0]=='1') ! pthread_create(&th2,pthread_attr_default,(void *)fg,NULL); else fg(); pthread_join(th,NULL); ! pthread_detach(&th); pthread_cond_destroy(&co); pthread_mutex_destroy(&mu); --- 50,67 ---- if (argc<2) exit(1); ! pthread_mutex_init(&mu,&pthread_mutexattr_default); ! pthread_cond_init(&co,&pthread_condattr_default); ! pthread_create(&th,&pthread_attr_default,(void *)bg,NULL); if (argv[1][0]=='1') ! pthread_create(&th2,&pthread_attr_default,(void *)fg,NULL); else fg(); pthread_join(th,NULL); ! pthread_detach(th); pthread_cond_destroy(&co); pthread_mutex_destroy(&mu);