Linux线程的创建
一、线程与进程的区别
1、线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
2、进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块中。以表示该进程拥有这些资源或正在使用它们。
3、进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
二、线程的创建
<span style="font-size:18px;">int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void *),
void *restrict arg
);</span>
第一个参数thread 是指向pthread_t的指针
函数的返回值
三、不带参数的线程创建实例
</pre><pre name="code" class="cpp">#include<stdio.h> #include<pthread.h> void *thread1(void) { while(1) { printf("i am is thread1\n"); sleep(1); } } int main() { int ret; pthread_t id1; ret = pthread_create(&id1,NULL,(void *)thread1,NULL); if(ret != 0) { printf("thread1 create error quit\n"); exit(1); } while(1) { printf("i am main pthread\r\n"); sleep(1); } return 0; }
编译和运行结果如下:记得编译的时候加上-lpthread
四、带参数的线程创建实例
<span style="font-size:18px;">#include<stdio.h>
#include<pthread.h>
struct argue
{
int id;
char p;
};
void *thread1(void)
{
printf("i am is thread1\n"); }
void *thread2(void *arg)
{
struct argue *ar=(struct argue *)arg;
printf("i am thread2:arg is:%d %c\n",ar->id,ar->p); }
int main()
{
int ret;
struct argue arg;
printf("iam main threan\n");
pthread_t id1,id2;
ret = pthread_create(&id1,NULL,(void *)thread1,NULL);
if(ret != 0)
{
printf("thread1 create error quit\n");
exit(1);
}
arg.id=1;
arg.p='w';
ret = pthread_create(&id2,NULL,(void *)thread2,(void *)&arg);
if(ret != 0)
{
printf("thread2 create error quit\n");
exit(1);
} sleep(3);
return 0; }</span>
Linux线程的创建的更多相关文章
- linux线程控制-2(线程控制函数)
记录肖堃老师讲解的linux线程 1. 创建线程 int pthread_create( (pthread_t *thread, pthread_attr_t *attr, void *(*start ...
- Linux线程-创建
Linux的线程实现是在内核以外来实现的,内核本身并不提供线程创建.但是内核为提供线程[也就是轻量级进程]提供了两个系统调用__clone()和fork (),这两个系统调用都为准备一些参数,最终都用 ...
- linux内核中创建线程方法
1.头文件 #include <linux/sched.h> //wake_up_process() #include <linux/kthread.h> //kthread_ ...
- Linux多线程编程——线程的创建与退出
POSIX线程标准:该标准定义了创建和操纵线程的一整套API.在类Unix操作系统(Unix.Linux.Mac OS X等)中,都使用Pthreads作为操作系统的线程.Windows操作系统也有其 ...
- 三十六、Linux 线程——线程基本概念及线程的创建和终止
36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段.代码段和堆栈段. 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存 ...
- linux内核中创建线程方法【转】
本文转载自:https://www.cnblogs.com/Ph-one/p/6077787.html 1.头文件 #include <linux/sched.h> //wake_up_p ...
- Linux 系统编程 学习:09-线程:线程的创建、回收与取消
Linux 系统编程 学习:09-线程:线程的创建.回收与取消 背景 我们在此之前完成了 有关进程的学习.从这一讲开始我们学习线程. 完全的开发可以参考:<多线程编程指南> 在Linux ...
- 关于linux的一点好奇心(五):进程线程的创建
一直以来,进程和线程的区别,这种问题一般会被面试官拿来考考面试者,可见这事就不太简单.简单说一点差异是,进程拥有独立的内存资源信息,而线程则共享父进程的资源信息.也就是说线程不拥有内存资源,所以对系统 ...
- APUE学习之多线程编程(一):线程的创建和销毁
一.线程标识 和每个进程都有一个进程ID一样,每个线程也有一个线程ID,线程ID是以pthread_t数据类型来表示的,在Linux中,用无符号长整型表示pthread_t,Solaris ...
随机推荐
- eclipse设置统一编码
1.Window-->Preferences-->General-->Workspace->Text file encoding->Other->UTF-8. 2. ...
- Java 去除 ArrayList 集合中的重复元素
// One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 Arr ...
- jQuery选择器课堂随笔
$(function(){ //并集选择器 /* $("h2,ul").css("background","pink");* ...
- asp.net core mvc剖析:mvc执行过程(一)
前面介绍了路由的过程,我们再来看下MvcRouteHandler的代码: public Task RouteAsync(RouteContext context) { ...... //根据路由信息查 ...
- vim编译安装+lua模块
vim编译安装+lua模块 使用背景:代码自动补全插件,需要安装lua模块 安装准备,首先下载安装vim所依赖的其它安装包,ncurses,lua,readline,vim 源码下载,编译安装 ncu ...
- phpcms v9更改后台文章排序的方法
后台文章排序怎么才可以按自己输入的数字排列?如按4,3,2,1,从大到小排列?实现方法如下: 修改文件: phpcms\modules\content 中的 content.php 代码如下: $da ...
- 粗谈shell脚本风格
注意:此风格并非官方版本,为个人在编写和维护脚本程序时总结出来的民间版本.0. 开头:除去开头的#!/bin/bash,最前面的就是脚本描述注释了,视个人喜好而定,例如: ############## ...
- 从源码看HashMap键值对集合
之前我们看过了两种类型的集合,ArrayList集合和LinkedList集合,两种集合各有优势,我们不具体说了,但是本篇要看的集合可以完成它们完成不了的任务.比如:现有一篇文章,要你统计其中出现了哪 ...
- Docker存储驱动之Btrfs简介
简介 Btrfs是下一代的copy-on-write文件系统,它支持很多高级特性,使其更加适合Docker.Btrfs合并在内核主线中,并且它的on-disk-format也逐渐稳定了.不过,它的很多 ...
- 前端发展态势 && 前端工作流程个人浅析
于在未开启cleartype的情况下,一些中文字体在非偶数字号下的显示效果欠佳,所以一般建议使用12.14.16.18.22px等偶数字号.也就 是对某个分辨率选择离它最近的偶数字号.例如:屏幕横向分 ...