<310>函数
#include "myapue.h" #include <pthread.h> pthread_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使用库函数spa
1)在Liunx中函数库的命名规则都是以“lib”开头,所以,库文件只需填写lib以后的内容便可。线程
2)pthread 库不是 Linux 系统默认的库,链接时须要使用静态库 libpthread.a,因此在使用pthread_create()建立线程时,须要连接该库。code
3)连接时加上-lpthread进程
(2)<309>内存
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, get
void *(*start_routine) (void *), void *arg);it
thread:新建立线程的ID会被设置成thread指向的内存单元。class
attr:用于定制各类不一样的线程属性。设置为NULL,建立一个具备默认属性的线程。thread
start_routine:新建立的线程从start_routine函数的地址开始运行。
arg:若是须要向start_routine函数传递的参数有一个以上,须要把这些参数放到一个结构中,而后把这个结构的地址做为arg参数传入。
函数调用失败时返回错误码,而不是设置errno。
(3)<308>
pthread_t pthread_self(void);
线程调用得到自身的线程ID。
(4)
主线程须要休眠,若是主线程不休眠,它就可能会退出,这样新线程尚未机会运行,整个进程可能就已经终止了。