创建单个线程

#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. 关于Powershell执行时的问题

    问题1: [问题描述] 使用Invoke-Command命令登录远程主机执行命令时,提示如下错误: [192.168.1.135] 连接到远程服务器失败,错误消息如下: WinRM 客户端无法处理该请 ...

  2. 二分查找与 bisect 模块

    Python 的列表(list)内部实现是一个数组,也就是一个线性表.在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n).对于大数据量,则可以用二分查找进行优化.二分查找 ...

  3. 【19】javascript有哪些方法定义对象

    创建Object的方式有4种. 方式一: 通过对象字面量表示法(又称为直接量.原始方式). var obj = {name:"moyu"}; 方式二: 通过new和构造函数Obje ...

  4. python算法-队列

    一.队列的特征性: 1. 先进先出 9 8 7 6 5 4 3 2 1 0 last                                                           ...

  5. 八、docker的常用命令

    1 Docker常用命令 1.1 存储镜像 如果要导出镜像到本地文件,可以使用 docker save 命令. docker save -o log_v140.tar docker.io/vmware ...

  6. 信息安全试验-DES加密!

    信息安全试验二--DES加密算法 本渣表示没有理解原理,照着书上敲了一发,运行无误! 吐槽:手动S盒简直丧心病狂,扩展置换表全是手动输入,加密原理还是很好理解,两次异或,先混淆. 此代码数据由老师给出 ...

  7. Dialog共通写法(两个button)

    package jp.co.hyakujushibank.view import android.app.Dialogimport android.content.Contextimport andr ...

  8. BZOJ 3110 [Zjoi2013]K大数查询 ——树套树

    [题目分析] 外层区间线段树,内层是动态开点的权值线段树. SY神犇说树套树注重的是内外层的数据结构的选择问题,果然很重要啊. 动态开点的实现方法很好. [代码] #include <cstdi ...

  9. 洛谷 [P2575] 高手过招

    SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来, ...

  10. 济南学习 Day 5 T2 晚

    等比数列(sequence) [题目描述] 判断一个数列是否为等比数列. 等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0. [输入说明] 输入文件的第一行有一个 ...