线程的总结
来源:互联网 发布:贝叶斯网络训练 编辑:程序博客网 时间:2024/05/17 18:46
UNIX进程有了多个控制线程以后,在程序设计时可以把进程设计成在同一时间不止做一件事情,每个线程处理各自独立的任务。
线程与进程的关系:
线程包含了表示进程执行环境必须的信息,其中包含表示线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。
进程的所有信息对该进程的所有线程都是共享的,包含可执行的程序文本,程序的全局内存和堆内存,栈以及文件描述符。
关于线程ID的函数
#include <pthread.h>
int pthread_equal(pthread_t tid1,pthread_t tid2);//比较两个线程ID,相当返回0
pthread_t pthread_self(void);//获得自身的线程ID
(1)线程的创建
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rin)(void),void *restrict arg);
成功返回0
第一个参数指向的内存单元被设置成新创建线程的线程ID。
attr参数用于定制线程属性,这里设置为NULL。
第三个参数可以传递一个函数的指针
如果函数有参数,那么可以把参数作为一个结构体由第四个参数传入。(线程的创建并不能保证哪个线程会先运行)
(2)线程终止(线程还可以被同一进程的其他线程取消)
#include <pthread.h>
void pthread_exit(void *rval_ptr);
rvtal_ptr就是一个指针
可以用
int pthread_join(pthread_t thread,void** rval_ptr);//来访问
如果成功就返回0,失败则返回错误编号
调用线程将一直阻塞,直到指定的线程调用pthread_exit,从启动历程中返回会被取消。
若对线程返回值不感兴趣,那么久可以把rtval_ptr设置为NULL,这样就光等待指定线程终止。
示例代码
#include <stdio.h>
#include <pthread.h>
void *fun(void* arg)
{
printf("线程id%d\n",pthread_self());
pthread_exit(NULL);
}
int main()
{
pthread_t id;
pthread_create(&id,NULL,fun,NULL);//线程在创建的这一刻就开始调用函数fun了
if( pthread_join(id,NULL)==0)
{
printf("线程结束\n");
}
printf("进程的线程id%d\n",pthread_self());
return 0;
}
- 线程同步的总结
- 线程的使用总结
- 线程池的总结
- 线程同步的总结
- 线程池的总结
- 线程的总结
- 线程的总结
- 对线程的总结
- 线程的总结
- 关于线程的总结
- WIN32线程的基础知识 总结
- -学习日记-线程的总结
- 线程问题的小总结
- 学习线程同步的总结
- 有关线程的所有总结
- 关于线程知识的总结
- windows线程同步的总结
- 线程的入口函数总结
- ios xib label 自适应宽度
- #include<algorithm>中的sort算法
- Gradle仓库配置
- 梦断短细长流往事空
- Gradle编译框架基础
- 线程的总结
- 树莓派配置无线网卡
- 比特币协议是怎样工作的(上)
- 29.Your database instance is configured with automatic undo management and the UNDO_RETENTION
- c/c++ 数组和指针的一些不同之处
- 嵌入式C语言实战开发详解(三)
- angularjs/ionic $resource 出现 preflight的解决方案
- 0718 -- 0728 webview/博客园资料/多线程/网络请求不同方式/导航栏外观设置
- BestCoder 2nd Anniversary HDU5719 Arrange