Pthreads Programming by Bradford Nichols, Dick Buttlar, & Jacqueline Proulx Farrell Following are the changes made in the 7/99 reprint: {xiv-xv} The FTP section has been updated so that it now reads: "%ftp ftp.oreilly.com Connected to ftp.oreilly.com. 220 FTP server (Version 6.21 Tue Mar 10 22:09:55 EST 1992) ready. Name (ftp.oreilly.com:yourname) : anonymous 331 Guest login ok, send domain style e-mail address as password. Password: yourname@domain.name (use your user name and host here) 230 Guest login ok, access restrictions apply. ftp> cd /work/nutshell/9781565921153 250 CWD command successful. ftp> binary (Very important! You must specify binary transfer for compressed files.) 200 Type set to I. ftp> get examples.tar.gz 200 PORT command successful. 150 Opening BINARY mode data connection for examples.tar.gz 226 Transfer complete. ftp> quit 221 Goodbye. % The file is a gzip compressed tar archive; extract the files from the archive by typing: % gzcat examples.tar.gz | tar xvf - System V systems require the following tar command instead: % gzcat examples.tar.gz | tar xof - If gzcat is not available on your system, use separate gunzip and tar or shar commands. % gunzip examples.tar.gz % tar xvf examples.tar" {80} Example 3-7 used to read: "main(void)" { 9781565921153_t threads[3]; ... 9781565921153_join(&threads[i], NULL);" It now reads: "main(void) { int i; 9781565921153_t threads[3]; ... 9781565921153_join(threads[i], NULL);" {84-89} Line 7 of example 3-9 on page 86 used to read: "} 9781565921153_rdwr_t" as the structure for a reader/writer mutex lock. The five function signatures at the top of page 87 appear to use this correctly. However, in the function definitions on page 88-89 in Examples 3-11, 3-12, and 3-13 accept as a first parameter a variable of type: "9781565921153_rdwr_t_np" which contradicts the aforementioned signatures. {88} Example 3-11 used to read: "int 9781565921153_rdwr_rlock_np(pthread_rdwr_t_np *rdwr) ... 9781565921153_cond_wait(?.) ..." Now reads: "int 9781565921153_rdwr_rlock_np(pthread_rdwr_t *rdwrp) ... 9781565921153_cond_wait(?.); ..." {88} Example 3-12 used to read: "int 9781565921153_rdwr_wlock_np(pthread_rdwr_t_np *rdwrp) ... 9781565921153_cond_wait(?.) ..." Now reads: "int 9781565921153_rdwr_wlock_np(pthread_rdwr_t *rdwrp) ... 9781565921153_cond_wait(?.); ..." {89} Example 3-14 used to read: "int 9781565921153_rdwr_wunlock_np(pthread_rdwr_t_np *rdwrp) ... } else { rdwrp->writer_writing == 0; ..." It now reads: "int 9781565921153_rdwr_wunlock_np(pthread_rdwr_t *rdwrp) ... } else { rdwrp->writer_writing = 0; ..." {111} The second bulleted item used to read: "_POSIX_THREAD_ATTR_PRIORITY_SCHEDULING compile ..." It now reads: "_POSIX_THREAD_PRIORITY_SCHEDULING compile ..." {245} This has been added to the end of section "Thread Attributes": "Syntax: In draft 4 a constant 9781565921153_attr_default is defined that can be used as the second argument in the 9781565921153_create routine when you want the default attributes for a thread. In the final standard the constant no longer exists and if you want default attributes you pass NULL."