Linux下C语言多线程学习之一——线程的创建
来源:互联网 发布:emlog博客源码 编辑:程序博客网 时间:2024/06/05 06:40
目录
- 目录
- 线程概念
- 创建线程示例
- 线程创建流程解析
1 线程概念
一个进程可以看做是一个控制线程,同时只能做一件事情,而在进程中创建多个线程,可以让进程同时处理多个任务,提高系统响应时间和吞吐量。
进程中的所有信息对该进程的所有线程都是共享的,包括可执行程序文本、全局变量、堆内存、栈以及文件描述符。
2 创建线程示例
#include <pthread.h>#include <stdio.h>void *thread_fn(void *arg){ printf("this is thread, thread_id:%##x, arg:%d\n", pthread_self(), (int)arg); return 1;}int main(void){ pthread_t tid; int err; err = pthread_create(&tid, NULL, thread_fn, (void *)1); if(err){ printf("cant`t creat thread: %s\n", strerror(err)); return 0; } pthread_join(tid, &rval_p); printf("thread is end.rval=%d\n", (int)rval_p); return 0;}
执行结果如下
this is thread, thread_id:0xd26f8700, arg:1thread is end.rval=1
注意:编译多线程程序时,需要指定线程库,即加上-lpthread
3 线程创建流程解析
pthread_t tid:线程id,类似于进程id。线程id类型pthread_t为一个无符号整数,在不同系统中有不同 的表示,可能是unsigend int,也可能是unsigned long等等。在FreeBSD中,使用指向线程数据结构的指针作为线程id。
pthread_create(&tid, NULL, thread_fn, (void *)1);:创建一个线程,原型为:
int pthread_create(pthread_t thread, const pthread_attr_t *attr, void (start_routine) (void ), void *arg);
thread指针指向内存用于存放线程id;
attr为线程属性,这里不设置属性,所以用NULL;
start_routine线程从该函数开始执行,该函数类型为void start_routine(void )。
pthread_self():获取调用线程的线程id,类似与进程的getpid()。原型为 pthread_t pthread_self(void)。
pthread_join:阻塞等待线程结束。如果不使用pthread_join,那么主线程执行完后,整个进程就退出了,此时创建的线程可能还没有执行完。原型 int pthread_join(pthread_t thread, void **retval);
其中thread为线程id,retval为线程的终止状态,如果对线程的终止状态不感兴趣可以设为NULL。
- Linux下C语言多线程学习之一——线程的创建
- linux下C语言多线程(第一篇)创建线程
- linux下C语言多线程(一)线程的创建与取消
- linux下C语言多线程(一)线程的创建与取消
- linux下C语言多线程(一)线程的创建与取消
- linux多线程学习(二)—线程的创建和退出
- Linux下C语言的多线程编程学习
- Linux下C语言的多线程编程学习
- Linux下C语言的多线程编程学习
- Java并发学习之一——线程的创建
- linux下C语言多线程(三)线程同步
- linux下C语言多线程(四)线程中止
- linux下C语言多线程(三)线程同步
- linux下C语言多线程(四)线程中止
- linux下C语言多线程(三)线程同步
- 多线程~~简单的线程创建,C语言实现
- 多线程~~简单的线程创建,C语言实现
- C语言多线程基础-01-线程的创建与销毁
- 一个简单的Java反射Demo
- Hadoop Left Join
- 支持向量机(SVM)与其理论发展(2):对偶学习
- Qt5注册全局热键
- Hadoop Left Join2
- Linux下C语言多线程学习之一——线程的创建
- 网页特效代码
- Codeforces
- 使用weka内置算法分析数据(图形界面操作)
- Atitit 个人 企业 政府 等组织 财政收入分类与提升途径attilax总结 v2
- Python(三)
- ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open”的方法
- js监控enter键触发函数提交数据或者登陆
- 梯度下降