线程相关函数(POSIX线程):
创建单个线程
#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线程):的更多相关文章
- 通用线程:POSIX 线程详解,第 3 部分 条件互斥量(pthread_cond_t)
使用条件变量提高效率 本文是 POSIX 线程三部曲系列的最后一部分,Daniel 将详细讨论如何使用条件变量.条件变量是 POSIX 线程结构,可以让您在遇到某些条件时“唤醒”线程.可以将它们看作是 ...
- 通用线程:POSIX 线程详解,第 3 部分
通用线程:POSIX 线程详解,第 3 部分 使用条件变量提高效率 Daniel Robbins, 总裁兼 CEO, Gentoo Technologies, Inc. 简介: 本文是 POSIX 线 ...
- POSIX 线程详解 一种支持内存共享的简捷工具
线程是有趣的 了解如何正确运用线程是每一个优秀程序员必备的素质.线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而 ...
- POSIX 线程详解
一种支持内存共享的简捷工具 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程.其中还涉及大量幕后细节,读 ...
- Linux中-POSIX 线程详解
一种支持内存共享的简捷工具 摘自https://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/ 线程是有趣的 了解如何正确运用线 ...
- POSIX 线程详解(经典必看)
http://www.cnblogs.com/sunminmin/p/4479952.html 总共三部分: 第一部分:POSIX 线程详解 ...
- <基于Qt与POSIX线程>多线程下载器的简易搭建
原创博客,转载请联系博主! 本项目已托管到本人Git远程库:https://github.com/yue9944882/Snow 项目目标 Major Functionality 开发环境: Ce ...
- Linux posix线程库总结
由于历史原因,2.5.x以前的linux对pthreads没有提供内核级的支持,所以在linux上的pthreads实现只能采用n:1的方式,也称为库实现. 线程的实现,经历了如下发展阶段: Linu ...
- Posix线程编程指南(5) 杂项
在Posix线程规范中还有几个辅助函数难以归类,暂且称其为杂项函数,主要包括pthread_self().pthread_equal()和pthread_once()三个,另外还有一个LinuxThr ...
随机推荐
- SQL Server数据库和MySQL数据库有什么区别?
SQL Server数据库和MySQL数据库有什么区别呢?详细很多初入IT行业的朋友对于SQL Server数据库和MySQL数据库经常搞混,认为这两种数据库是同一种,其实不然,今天我们来分析一下这两 ...
- CentOS 下通过命令登录Mysql
CentOS 下通过命令登录Mysql: mysql -uroot -p 按回车键后输入密码
- CSAPP学习笔记—虚拟内存
CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...
- windows下在指定目录下打开命令行
直接用cd的话比较麻烦,可以先进入制定目录后,按住shift键,鼠标右键可以选择“在此处打开命令窗口”
- 2011 Michigan Invitational Programming Contest
Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...
- 在table第一行前插入一行
在table的第一行前插入一行. //追加到第一行 var html="<tr><td>xxId</td><td>xxName</td& ...
- 九度oj 题目1369:字符串的排列
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个 ...
- SPOJ CIRU The area of the union of circles ——Simpson积分
[题目分析] 圆的面积并. 直接Simpson积分,(但是有计算几何的解法,留着flag). simpson积分,如果圆出现了不连续的情况,是很容易出事情的.(脑补一下) 但是没有什么办法,本来就是一 ...
- Snmp的学习总结(一)
摘自:http://blog.csdn.net/shanzhizi/article/details/11606767 目录(?)[-] SNMP的5种协议数据单元 SNMP的运行过程 11 Get ...
- 集合-LinkList
参考:http://www.cnblogs.com/skywang12345/p/3308807.html Consumer.class 消费者接口 参考:https://www.jianshu. ...