APUE学习笔记-POSIX线程(pthread)

<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 *attrget

                                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)

主线程须要休眠,若是主线程不休眠,它就可能会退出,这样新线程尚未机会运行,整个进程可能就已经终止了。 

相关文章
相关标签/搜索