创建单个线程

#include <pthread.h>
// 若成功返回0,出错返回正的Exxx值
int pthread_create(pthread_t *tid, // 每个线程在进程中的线程ID
                   const pthread_attr_t *attr, // 线程属性,默认为0
                   void * (*func)(void *), // 该线程执行的函数
                   void *arg); // 上述函数的参数

等待一个给定线程终止

#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
int pthread_join(pthread_t *tid, void **status); // status存储所等待线程的返回值 // 类似于waitpid()函数

获取线程ID

#include <pthread.h>

// 返回调用线程自身的ID,不同于pthread_create中的线程在进程中的ID
pthread_t pthread_self(void);

将某个线程转变为脱离状态

一个线程是可汇合的(joinable)或者脱离的(detached)
一个可汇合的线程终止时,它的线程ID和退出状态将保留到另一个线程对它调用pthread_join
一个脱离的线程终止时,所有相关资源都被释放,我们无法等待它的终止
如果我们需要知道某个线程什么时候终止,那么最好将其保持在可汇合状态

#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
int pthread_detach(pthread_t tid);

终止一个线程

终止一个线程有三种方法:
1.代用pthread_exit
2.启动线程的函数(pthread_create的第三个参数)可以返回
3.该线程所在进程的main函数返回或任何线程调用了exit

#include <pthread.h>

void pthread_exit(void *status);

处理线程的特定数据

#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
// 当一个使用线程特定数据的函数被调用时,pthread_once通常被此函数调用
int pthread_once(pthread_once_t *onceptr, // pthread_once使用onceptr指向的变量中的值保证init只被调用一次
void (*init)(void)); // 若成功返回0,出错返回正的Exxx值
// 创建某个线程特定数据
int pthread_key_create(pthread_key_t *keyptr, // 特定数据中被创建的键,而数据指针是值,但我们需要
void (*destructor)(void *value)); // 用到的数据其实是该指针指向的位置的数据

获取和存放与某个键关联的值

#include <pthread.h>

// 返回指向线程特定数据的指针,即上述的值
void *pthread_getspecific(pthread_key_t key); // 若成功返回0,出错返回正的Exxx值
int pthread_setspecific(pthread_key_t key, const void *value);

相关内容:

进程与线程

互斥、同步

互斥锁

#include <pthread.h> 

// 若成功返回0,出错返回正的Exxx值 
// mptr通常被初始化为PTHREAD_MUTEX_INITIALIZER
int pthread_mutex_lock(pthread_mutex_t *mptr);
int pthread_mutex_unlock(pthread_mutex_t *mptr);

条件变量:

#include <pthread.h>

// 以下两个函数使用条件变量
// 若成功返回0,出错返回正的Exxx值
// cptr通常被初始化为PTHREAD_COND_INITIALIZE
int pthread_cond_signal(pthread_cond_t *cptr); // cptr指条件变量的类型 int pthread_cond_wait(pthread_cond_t *cptr, pthread_munex_t *mptr);

pthread_cond_wait必须放在pthread_mutex_lock和pthread_mutex_unlock之间,因为他要
根据共享变量的状态来觉得是否要等待,而为了不永远等待下去所以必须要在lock/unlock
队中

pthread_cond_signal通常唤醒等在相应条件变量上的单个进程

#include <pthread.h>

// 若成功返回0,出错返回正的Exxx值
int pthread_cond_broadcast(pthread_cond_t *cptr); // 唤醒在相应条件变量上的所有线程 int pthread_cond_timewait(pthread_cond_t *cptr, pthread_munex_t *mptr, // 允许线程设置一个阻塞时间限制
const struct timespec *abstime);
// abstime指的是绝对时间,而不是一个时间增量
// abstime通常调用gettimeofday获取当前时间,将其复制到timespec结构中,再加上期望的时间限制

线程相关函数(POSIX线程):的更多相关文章

  1. 通用线程:POSIX 线程详解,第 3 部分 条件互斥量(pthread_cond_t)

    使用条件变量提高效率 本文是 POSIX 线程三部曲系列的最后一部分,Daniel 将详细讨论如何使用条件变量.条件变量是 POSIX 线程结构,可以让您在遇到某些条件时“唤醒”线程.可以将它们看作是 ...

  2. 通用线程:POSIX 线程详解,第 3 部分

    通用线程:POSIX 线程详解,第 3 部分 使用条件变量提高效率 Daniel Robbins, 总裁兼 CEO, Gentoo Technologies, Inc. 简介: 本文是 POSIX 线 ...

  3. POSIX 线程详解 一种支持内存共享的简捷工具

    线程是有趣的 了解如何正确运用线程是每一个优秀程序员必备的素质.线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而 ...

  4. POSIX 线程详解

    一种支持内存共享的简捷工具 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程.其中还涉及大量幕后细节,读 ...

  5. Linux中-POSIX 线程详解

    一种支持内存共享的简捷工具   摘自https://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/ 线程是有趣的 了解如何正确运用线 ...

  6. POSIX 线程详解(经典必看)

    http://www.cnblogs.com/sunminmin/p/4479952.html 总共三部分: 第一部分:POSIX 线程详解                               ...

  7. <基于Qt与POSIX线程>多线程下载器的简易搭建

    原创博客,转载请联系博主! 本项目已托管到本人Git远程库:https://github.com/yue9944882/Snow 项目目标  Major Functionality 开发环境:  Ce ...

  8. Linux posix线程库总结

    由于历史原因,2.5.x以前的linux对pthreads没有提供内核级的支持,所以在linux上的pthreads实现只能采用n:1的方式,也称为库实现. 线程的实现,经历了如下发展阶段: Linu ...

  9. Posix线程编程指南(5) 杂项

    在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self().pthread_equal()和pthread_once()三个,另外还有一个LinuxThr ...

随机推荐

  1. 【RAID】raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  2. 【01】markdown特殊说明

    [01]说明 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令 ...

  3. xfce-OpenVAS自动化安全风险评估指南

    1.  登录系统 在客户端,打开浏览器,在地址栏输入https://IP:9392/ 看到如下界面: 我们要信任此网站,点击继续浏览此网站,进入系统登录界面,如下图: 输入我提供的通用登录账号:wdl ...

  4. 逻辑回归(Logistic Regression)算法小结

    一.逻辑回归简述: 回顾线性回归算法,对于给定的一些n维特征(x1,x2,x3,......xn),我们想通过对这些特征进行加权求和汇总的方法来描绘出事物的最终运算结果.从而衍生出我们线性回归的计算公 ...

  5. RESTful API接口

    我所理解的RESTful Web API [设计篇] 百度:RESTful restful一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件 ...

  6. 九度oj 题目1109:连通图

    题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入: 每组数据的第一行是两个整数 n 和 m(0<=n<=1000).n 表示图的顶点数目,m 表示图中边的 ...

  7. Codeforces Round #358 (Div. 2)——C. Alyona and the Tree(树的DFS+逆向思维)

    C. Alyona and the Tree time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. [Vijos1308]埃及分数(迭代加深搜索 + 剪枝)

    传送门 迭代加深搜索是必须的,先枚举加数个数 然后搜索分母 这里有一个强大的剪枝,就是确定分母的范围 #include <cstdio> #include <cstring> ...

  9. 算法复习——无源汇可行流(zoj2314)

    题目: The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nucl ...

  10. 连通 OR 不连通(NOJ 1044)

    比赛描述 给定一个无向图,一共n个点,请编写一个程序实现两种操作: D x y 从原图中删除连接x,y节点的边. Q x y 询问x,y节点是否连通 输入 第一行两个数n,m(5<=n<= ...