创建单个线程

#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. cookie小结(转)

    原文地址:http://www.cnblogs.com/xianyulaodi/p/6476991.html#_label0 作者:咸鱼老弟   阅读目录 什么是cookie       官方定义:N ...

  2. c#笔记2018-12-26

    using System; /*C#学习笔记2018-12-26 * 1.@逐字字符串 * 2.数据类型转换 * 3.变量声明和占位符使用 * 4.接收用户输入值 * 5.const 关键字 * 6. ...

  3. 九度oj 题目1091:棋盘游戏

    题目描述: 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代价最小的路径:    1.只能沿上下左右四个方向移动    2.总代价是没走一步的 ...

  4. Azure Storage Blob文件重命名

    Azure Storage的SDK并没有提供文件重命名的方法,而且从StorageExplorer管理工具里操作修改文件名的时候也有明确提示: 是通过复制当前文件并命名为新文件名再删除旧文件,不保存快 ...

  5. iOS学习笔记21-推送证书与秘钥申请

    ---恢复内容开始--- 一.iOS证书 iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到App Store这两个证书都是必须的,它是iOS开发的基本证书.Xcode7以后真机 ...

  6. 【Luogu】P1879玉米田(状压DP)

    题目链接 数据范围这么小,难度又这么大,一般就是状态压缩DP了. 对输入进行处理,二进制表示每一行的草地状况.如111表示这一行草地肥沃,压缩成7. 所以f[i][j]表示第i行状态为j时的方案数 状 ...

  7. c++ primer note

    ---恢复内容开始--- 1.decltype 2.auto 3.cbegin 4.cend 5.constexpr 6.(*Parray)[10]=&arr; //Parray 指向一个含有 ...

  8. SSD ECC中的LDPC编解码原理

    转自:http://blog.csdn.net/zhuzongpeng/article/details/78899198 目前SSD中ECC纠错代码主要两种BCH和LDPC.不过,随着SSD对ECC纠 ...

  9. 【POJ1226】Substrings(后缀数组,二分)

    题意: n<=10,len<=100 思路: 只有一个字符串的时候特判一下 #include<cstdio> #include<cstring> #include& ...

  10. JStorm学习

    一.简介 JStorm是一个分布式实时计算引擎.JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任 ...