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)

主線程須要休眠,若是主線程不休眠,它就可能會退出,這樣新線程尚未機會運行,整個進程可能就已經終止了。 

相關文章
相關標籤/搜索