linux pthread 基本使用

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
发布了4 篇原创文章 · 获赞 4 · 访问量 246

猜你喜欢

转载自blog.csdn.net/lpaim/article/details/104234019