Advanced Programming in the UNIX® Environment

(lily) #1
ptg10805159

386 Threads Chapter 11

thread
2

thread
1

thread
3

work
queue job

TID 1

job

TID 3

job

TID 2

job

TID 3

master
thread

Figure 11.1 Work queue example

The memory location pointed to bytidpis set to the thread ID of the newly created
thread whenpthread_createreturns successfully.Theattrargument is used to
customize various thread attributes. We’ll cover thread attributes in Section 12.3, but
for now,we’ll set this toNULLto create a thread with the default attributes.
The newly created thread starts running at the address of thestart_rtnfunction.
This function takes a single argument,arg,which is a typeless pointer.Ifyou need to
pass morethan one argument to thestart_rtnfunction, then you need to storethem in a
structureand pass the address of the structureinarg.
When a thread is created, there is no guarantee which will run first: the newly
created thread or the calling thread. The newly created thread has access to the process
address space and inherits the calling thread’s floating-point environment and signal
mask; however,the set of pending signals for the thread is cleared.
Note that the pthread functions usually return an error code when they fail. They
don’t seterrnolike the other POSIX functions. The per-thread copy oferrnois
provided only for compatibility with existing functions that use it. With threads, it is
cleaner to return the error code from the function, thereby restricting the scope of the
error to the function that caused it, instead of relying on some global state that is
changed as a side effect of the function.

Example


Although there is no portable way to print the thread ID, we can write a small test
program that does, to gain some insight into how threads work. The program in
Free download pdf