1. 概述:
该demo主要完成了linux下线程创建, 以及资源回收等操作,相关接口介绍可以参考<<UNIX环境高级编程>>
2. 测试:
/*
demo_pthread.c
线程编程demo : 线程创建, 以及资源回收等
pthread并非Linux系统的默认库, 而是POSIX线程库
在Linux中将其作为一个库来使用, 因此加上 -lpthread(或-pthread)以显式链接该库
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define MAX_BUF 64
static void * pthread_fun(void *arg){
char buf[MAX_BUF];
#if 0
/*
回收线程资源
将非分离的线程设置为分离线程
即通知线程库, 在指定的线程终止时回收线程占用的内存等资源
*/
pthread_detach(pthread_self());
#endif
memset(buf, 0x0, sizeof(buf));
memcpy(buf, (char *)arg, sizeof(buf));
/* 线程开始运行 */
printf("pthread start!\n");
printf("pthread id = %lu\n", pthread_self());
printf("pthread buf = %s\n", buf);
sleep(2);
/* 线程结束运行 */
printf("pthread end!\n");
pthread_exit((void *) 0);
}
int main(int argc, char **argv){
void * ret;
pthread_t pid;
char buf[MAX_BUF];
/* 主线程开始运行 */
printf("main start!\n");
memset(buf, 0x0, sizeof(buf));
printf("请输入消息\t");
scanf("%s", buf);
/*
创建线程
*/
if ((pthread_create(&pid, NULL, pthread_fun, (void*)buf)) != 0){
/*执行错误时, 并不修改系统全局变量errno*/
printf("pthread_create err\n");
return -1;
}
/*
回收线程资源
*/
if (pthread_join(pid, &ret) != 0){
printf("pthread_join err\n");
return -1;
}
printf("pthread ret = %ld\n", (long)ret);
/* 主线程结束运行 */
printf("main end!\n");
return 0;
}
#Makefile
CC := gcc
INCLUDE = -I /home/demo/include/
LIB = -lpthread
all:
$(CC) demo_pthread.c $(INCLUDE) $(LIB) -o demo_pthread -Wall -Werror
clean:
rm demo_pthread