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使用库函数

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)

主线程需要休眠,如果主线程不休眠,它就可能会退出,这样新线程还没有机会运行,整个进程可能就已经终止了。 


你可能感兴趣的:(APUE学习笔记-POSIX线程(pthread))