<310>
#include "myapue.h"#includepthread_t ntid;void printids(const char *s){ pid_t pid; pthread_t tid; pid = getpid(); tid = pthread_self(); printf("%s pid %lu tid %lu (0x%lx)\n", s, (unsigned long)pid,\ (unsigned long)tid, (unsigned long)tid);}void *thr_fn(void *arg){ printids("new thread: "); return((void *)0);}int main(void){ int err; err = pthread_create(&ntid, NULL, thr_fn, NULL); if(err != 0) err_exit(err, "can't create thread"); printids("main thread:"); sleep(1); exit(0);}
(1)GCC使用库函数
1)在Liunx中函数库的命名规则都是以“lib”开头,因此,库文件只需填写lib之后的内容即可。
2)pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程时,需要链接该库。
3)链接时加上-lpthread
(2)<309>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
thread:新创建线程的ID会被设置成thread指向的内存单元。
attr:用于定制各种不同的线程属性。设置为NULL,创建一个具有默认属性的线程。
start_routine:新创建的线程从start_routine函数的地址开始运行。
arg:如果需要向start_routine函数传递的参数有一个以上,需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。
函数调用失败时返回错误码,而不是设置errno。
(3)<308>
pthread_t pthread_self(void);
线程调用获得自身的线程ID。
(4)
主线程需要休眠,如果主线程不休眠,它就可能会退出,这样新线程还没有机会运行,整个进程可能就已经终止了。