linux多线程编程精解

POSIX Threads(通常简称为 Pthreads)定义了创建和操纵线程的一套 API 接口, 一般用于 Unix-like POSIX 系统中(如 FreeBSD、 GNU/Linux、 OpenBSD、 Mac OS 等系统)。
编写 Pthreads 多线程的程序时, 源码只需要包含 pthread.h 头文件就可以使用 Pthreads库中的所有类型及函数:
#include <pthread.h>
在编译 Pthread 程序时在编译和链接过程中需要加上-pthread 参数:
LDFLAGS += -pthread

1、创建线程

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

thread 用来指向新创建线程的 ID;
attr 用来表示一个封装了线程各种属性的属性对象,如果 attr 为 NULL,新线程就使用默认的属性;
start_routine 是线程开始执行的时候调用的函数的名字, start_routine 函数有一个指
向 void 的指针参数,并有 pthread_create 的第四个参数 arg 指定值,同时 start_routine
函数返回一个指向 void 的指针,这个返回值被 pthread_join 当做退出状态处理。
arg 为参数 start_routine 指定函数的参数。
线程被创建后将立即运行。
实例:

void *usart_receive(void *arg)
{
    ;
}
int main
{
    pthread_t tid;
    int ret;
    ret=pthread_create(&tid,NULL,imx_yulinjun_handler,NULL);
}

2、终止线程
进程的终止可以通过直接调用 exit()、执行 main()中的 return、或者通过进程的某个其它
线程调用 exit()来实现。在以上任何一种情况发生时,所有的线程都会被终止。如果主线程
在创建了其它线程后没有任务需要处理,那么它应该阻塞等待直到所有线程都结束为止,或
者应该调用 pthread_exit(NULL)。
调用 exit()函数会使整个进程终止,而调用 pthread_exit()只会使得调用线程终止,同时
在创建的线程的顶层执行 return 线程会隐式地调用 pthread_exit()。 pthread_exit()函数原型如
下:

void pthread_exit(void *retval);

retval 是一个 void 类型的指针,可以将线程的返回值当作 pthread_exit()的参数传入,这
个值同样被 pthread_join()当作退出状态处理。如果进程的最后一个线程调用了 pthread_exit(),
进程会带着状态返回值 0 退出。
3、连接和分离
线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。
默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用pthread_detach函数被分离。

实例:

void *usart_receive(void *arg)
{
    ;
}
int main
{
    pthread_t tid;
    int ret;
    ret=pthread_create(&tid,NULL,imx_yulinjun_handler,NULL);
    pthread_join(tid,NULL);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值