Linux线程基础函数

1. 线程标识:

(1) 比较两个线程ID;

#include <pthread.h>

int pthread_equal(pthread_t tid1, pthread_t tid2);

ret-若相等则返回非0值,否则返回0值

(2) 获取线程自身ID;

#include <pthread.h>

pthread_t pthread_self(void);

ret-调用线程的线程ID

2. 线程的创建:

#include <pthread.h>

int pthread_create(pthread_t *restrict tidp, //返回线程的ID

           const pthread_attr_t *restrict attr, //线程属性,默认为NULL

                  void *(*start_rtn)(void), //线程函数入口地址

                  void *restrict arg); //参数

ret-成功返回0 失败返回错误编号

3. 线程的终止:

(1) 线程只是从启动例程中返回,返回值是线程的退出码;

(2) 线程可以被同一例程中的其他线程取消;

(3) 线程调用pthread_exit。

#include <pthread.h>

void pthread_exit(void *rval_ptr);

rval_ptr是一个无类型指针,与传递给启动例程的单个参数类似,进程中的其他线程可以通过调用pthread_join函数访问到这个指针;

#include <pthread.h>

int pthread_join(pthread_t thread, void **rval_ptr);

ret-成功返回0 否则返回错误编号

调用线程一直阻塞,知道指定的线程调用pthread_exit,从启动例程中返回或者被取消;如果线程只是从他的启动例程中返回,rval—_ptr将包含返回码;如果线程被取消,由rval_ptr指定的内存单元就设置为PTHREAD_CANCELED.

如果线程已经处于分离状态,pthread_t就会调用失败,返回EINVAL。

如果对线程的返回值不感兴趣,可以吧rval_prt设置为NULL。这种情况下,调用pthread_join将等待线程终止,但不获取线程的终止状态。

4. 线程取消:

#include <pthread.h>

int pthread_cancel(pthread_t tid);

ret-成功返回0 失败返回错误码

函数使得由tid标识的线程行为表现为如果调用了参数是PTHREAD_CANCELD的pthread_exit函数,但是,线程可以选择忽略取消方式或者是控制取消方式。函数并不等待线程终止,它仅仅是提出请求;

5. 线程清理处理函数:

#include <pthread.h>

void pthread_cleanup_push(void(*rtn)(void*), void *arg);
void pthread_cleanup_pop(int execute); //调用删除上次push的清理程序

当线程执行以下动作时调用清理函数,调用者参数为arg,清理函数rtn的调用顺序是由pthread_cleanup_pus来安排的。

a. 调用pthread_exit;

b. 想用取消请求;

c. 用非零的execute参数调用pthread_cleanup_pop;

如果execute=0则函数不被调用;

注意正常从线程返回的时候,不会调用该清理函数;

时间: 2024-10-16 13:23:23

Linux线程基础函数的相关文章

linux 线程函数大全

Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线程键pthread_key_create 5.删除线程键pthread_key_delete 6.设置线程数据pthread_setspecific 7.获取线程数据pthread_getspecific 8.获取线程标示符pthread_self 9.比较线程pthread_equal 10.一次

Linux多线程实现及线程同步函数分析

在Linux中,多线程的本质仍是进程,它与进程的区别: 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 线程的特点: 1,线程是轻量级进程,有PCB,创建线程使用的底层函数和进程一样,都是clone 2,从内核看进程和线程是一样的,都有各自不同的PCB 3,进程可以蜕变成线程 4,在LINUX中,线程是最小的执行单位,进程是最小的分配资源单位 查看指定线程的LWP号命令: ps -Lf pid 线程优点: 提高程序并发性 开销小 数据通信,共享数据方便 线程缺点:

[转载]Linux 线程实现机制分析

本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的. 一.基础知识:线程和进程 按照教科书上的定义,进

Linux 线程与进程,以及通信

http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-id-3025213.html 1.首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位.与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体.进程是程序在某个数据集上的执行,

linux线程--基本应用

有感而发(可以直接忽略~):每次要用到线程,都要在网上重新学下基础,例子倒是不少:一种是排版好,讲的不全又不是自己想要的:一种是排版不好,直接略过了.两者兼有的又要苦苦寻找,所以还是自己总结了,觉得每个程序员都得了一种看别人不顺眼的病,哈哈.希望大家批评指正,我这个排版和总结有什么可优化的,绝对尽力而为. 本文主要介绍linux下线程的基本应用,列举了几个常用函数的用法及实例. 头文件 pthread.h 编译选项需要加 -pthread 常用函数 线程创建函数原型: 1 int pthread

Qt 线程基础(QThread、QtConcurrent等) 2

使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使用线程时需要非常小心.启动线程是很容易的,但确保所有共享数据保持一致很难.遇到问题往往很难解决,这是由于在一段时间内它可能只出现一次或只在特定的硬件配置下出现.在创建线程来解决某些问题之前,应该考虑一些替代的技术 : 替代技术 注解 QEventLoop::processEvents() 在一个耗时的计

线程基础--同步机制 (1)

1.  线程基础    概念 1). 线程全称控制线程 2). 多线程的优势: a) 比进程方便,可以共享相同的内存空间及文件描述符 b) 可以用于多个任务,而这些任务如果用单进程来实现是串行,在多线程里面由于CPU的调度可以实现穿插执行 c) 用于交互程序,将用户输入输出与其他部分分开,优化性能 3). 如何知道系统是否多线程pthread(POSIX线程) a) #ifdef  _POSIX_THREADS b) sysconf(_SC_THREADS) 4). 一个线程的数据结构 线程ID

Linux进程基础

Linux进程基础 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等.这些最基础的计算机动作被称为指令 (instruction).所谓的程序(program),就是这样一系列指令的所构成的集合.通过程序,我们可以让计算机完成复杂的操作.程序大多数时候被存储为可执行的文件.这样一个可执行文件就像是一个菜谱,计算机可以按照菜谱作出可口的饭

快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是Windows,装虚拟机也麻烦,所以还不如30块钱 买个腾讯云,用putty远程练上去写代码呢. 我一直都是putty+VIM在Linux下开发代码,好几年了,只要把putty和VIM配置好,其实 开发效率挺高的. 买好腾讯云后,装个Centos,会分配个外网IP,然后买个域名,在DNSPod解析过去