现在的位置: 首页 > 综合 > 正文

11.4创建线程

2013年07月29日 ⁄ 综合 ⁄ 共 1583字 ⁄ 字号 评论关闭

 

在传统的UNIX进程模型中,一个进程仅有一个控制线程。从概念上讲,这与基于线程的模型中的一个进程只包含一个线程是一样的。

在pthreads下,当一个程序运行时,它也是以一个有一个控制线程的进程形式启动的。一个程序运行的时候,在它创建更多的控制线程前,这个程序与传统的进程是无异的。可以调用 pthread_create函数来新增线程。

 

 

如果创建成功,返回0,失败返回错误代码。

如果pthread_create 成功,tidp 指向的内存位置被设置为新建线程的线程ID。

 

attr 参数用来自定义线程的属性。在第12.3节,我们会详细讲解线程的属性,但是,现在,我们设置attr为NULL,来创建有默认属性的线程。

新线程的起始运行地址是start_rtn函数的入口地址。如果你要给start_rtn传递多个参数,你需要把它们存储在一个结构中,并把这个结构的地址传给arg参数。

 

example:

thread.c

 

 

 

如果按一般的编译命令,会出现错误 undefined reference to `pthread_create'如下:

 

sunny@sunny-desktop:~/Desktop$ gcc thread.c -o thread 

/tmp/ccK7lPym.o: In function `main':

thread.c:(.text+0x83): undefined reference to `pthread_create'

collect2: ld returned 1 exit status

问题原因:
    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。

 

解决方法如下:

 

sunny@sunny-desktop:~/Desktop$ gcc thread.c -o thread -lpthread

sunny@sunny-desktop:~/Desktop$ ./thread

main thread: pid 3734 tid 3079206592 (0xb788f6c0)

new thread:  pid 3734 tid 3079203696 (0xb788eb70)

sunny@sunny-desktop:~/Desktop$ 

 

 


抱歉!评论已关闭.