1. 程式人生 > >Linux pthread_self和pthread_create函式

Linux pthread_self和pthread_create函式

pthread_self和pthread_create函式

標頭檔案

#include <pthread.h>

函式原型

pthread_t pthread_self(void); int pthread_create(pthread_t *thread tidp, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

引數

第一個引數為指向執行緒識別符號的指標。第二個引數用來設定執行緒屬性。第三個引數是執行緒執行函式的起始地址。最後一個引數是執行函式的引數。

功能

執行緒可以通過呼叫pthread_self函式獲得自身執行緒標識。建立執行緒呼叫pthread_create函式

說明

新建立的執行緒是從start_routine函式開始的,此函式只有一個無型別指標引數arg,如果需要向start_routine函式傳遞的引數不止一個,那麼需要把這些引數放到一個結構中,然後把這個結構的地址作為arg引數傳入。新建立的執行緒並不能保證新建立執行緒和呼叫執行緒那個執行緒會先執行。

unix環境高階程式設計的例子

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

pthread_t ntid;

void printids(const char *s)
{
	pid_t pid;
	pthread_t tid;

	pid = getpid();
	tid = pthread_self();
	printf("%s pid %u tid %u (0x%x)\n",s,
			(unsigned int)tid, (unsigned int)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)
	{
		printf("can't create thread: %s\n",strerror(err));
	}

	printids("main thread: ");
	sleep(1);
	exit(0);

}

ps: 因為pthread並非Linux系統的預設庫,在編譯時注意加上-lpthread引數,以呼叫靜態連結庫。如:gcc pthread.c -o pthread_create -lpthread