Linux进程线程
国境之南Fantasy
Coder
展开
-
pthread线程同步机制
1.互斥量当多个控制线程共享相同的内存时,需要确保每一个线程看到一致数据视图。如果不存在读取数据或者所有数据只读时不会存在一致性问题。如果某个线程正在修改变量而其他线程也可以读取或者修改这个变量的时候就需要对这些线程进行同步。在变量修改多于一个存储器访问周期时可能出现不一致的错误。(例如需要写的十一个长类型,需要多次写入内存。而写之间如果有其他线程读取就会出现同时读取一些修改过和没修改过的转载 2012-09-07 20:53:49 · 2542 阅读 · 0 评论 -
Linux kernel多线程的几种实现
驱动开发中常常会启动几个内核线程,在整个驱动生命周期期间执行某些操作,比如USB驱动的控制线程,一直等待SCSI命令,没有命令的话睡眠,有命令的话就唤醒线程,解析执行相关的命令。还有USB驱动中的扫描线程,如果有新的设备连接到USB总线,则会启动扫描过程,平时时候让出CPU资源休眠。常用的内核线程创建方法有3个,kernel_thread, kthread_create和kthread_r转载 2015-11-23 19:47:48 · 1548 阅读 · 0 评论 -
kthread_stop引起的OOP
1 使用kthread_create创建线程: struct task_struct *kthread_create(int (*threadfn)(void *data), void *data,转载 2015-12-15 14:58:23 · 1912 阅读 · 0 评论 -
运行不息的内核线程kthread
要创建一个内核线程有许多种方法,我们这里要学的是最简单的一种。打开include/linux/kthread.h,你就看到了它全部的API,一共三个函数。 struct task_struct kthread_run(int (*threadfn)(void *data), void *data, const char namefmt[],...)转载 2015-12-15 15:01:57 · 578 阅读 · 0 评论 -
linux进程管理与调度
[日期:2014-08-10]来源:Linux社区 作者:walkerkalr[字体:大 中 小]进程的管理与调度进程管理 进程描述符及任务结构进程存放在叫做任务队列(tasklist)的双向循环链表中。链表中的每一项包含一个具体进程的所有信息,类型为task_struct,称为进程描述符(process descriptor),该转载 2015-12-25 11:03:15 · 2062 阅读 · 0 评论 -
Linux 进程栈和线程栈的区别
:本文所涉及的环境为Linux, 下文讨论的栈跟内核栈,没有任何的关系,关于内核栈,请参考《深入Linux内核架构》中的2.4.1 进程复制这里有如下几个问题,线程栈的空间是开辟在那里的? 线程栈之间可以互访吗?为什么在使用pthread_attr_setstack函数时,需要设置栈的大小,而进程task_struct的 mm_struct *mm 成员中却并没有却并没有stack_siz转载 2016-07-07 13:42:26 · 761 阅读 · 0 评论 -
多线程情况下,主线程先退出,子线程会被强制退出吗
1、进程中线程之间的关系线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(...))。main执行完之后, 会调用exit()。exit() 会让整个进程over终止,那所有线程自然都会退出。2、主线程先退出,子线程转载 2016-07-08 21:37:20 · 30651 阅读 · 0 评论 -
谨慎使用多线程中的fork
前言在单核时代,大家所编写的程序都是单进程/单线程程序。随着计算机硬件技术的发展,进入了多核时代后,为了降低响应时间,重复充分利用多核cpu的资源,使用多进程编程的手段逐渐被人们接受和掌握。然而因为创建一个进程代价比较大,多线程编程的手段也就逐渐被人们认可和喜爱了。记得在我刚刚学习线程进程的时候就想,为什么很少见人把多进程和多线程结合起来使用呢,把二者结合起来不是更好吗?现在想想当转载 2016-08-12 16:04:29 · 1644 阅读 · 0 评论 -
Linux 线程实现机制分析
自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性、效率。本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的。4 评论杨沙洲 (pubb@163.net)国防科技大学计算机学院2003 年转载 2016-11-08 11:11:22 · 551 阅读 · 0 评论 -
Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
栈是什么?栈有什么作用?首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据栈的特点,很容易的想到可以利用数组,来实现这种数据结构。但是本文要讨论的并不是软件层面的栈,而是硬件层面的栈。转载 2016-11-08 11:15:09 · 1539 阅读 · 0 评论 -
gettid 和pthread_self的区别
Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,转载 2015-04-27 17:38:25 · 8567 阅读 · 0 评论 -
彻底释放Linux线程的资源
Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。解决这个问题,有2种方式,系统自动释放线程资源,或者由另一个线程释放该线程资源。注意,在这里,我认为进程运行后,本身,也是一个线程,主线程,主线转载 2015-04-15 15:42:28 · 1408 阅读 · 0 评论 -
Pthread创建线程后必须使用join或detach释放线程资源
Pthread 资料中,有这么一段话:(man pthread_detach):Either pthread_join(3) or pthread_detach() should be called for each thread that an application creates, so that system resources for the thread转载 2015-04-15 15:30:59 · 4957 阅读 · 0 评论 -
多线程还是多进程
from:http://blog.csdn.net/xie376450483/article/details/5790919关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是转载 2012-10-07 21:47:12 · 577 阅读 · 0 评论 -
6.1.1 用户级线程和内核级线程
from: http://book.51cto.com/art/201006/206946.htm6.1.1 用户级线程和内核级线程线程有3种实现模型:用户级或应用程序级线程内核级线程用户级和内核级混合线程图6-1显示了3种线程实现模型。图6-1(a)显示了用户级线程,图6-1(b)显示了内核级线程,图6-1(c)则显示了用户线程和内核线程的混合。转载 2012-09-21 17:06:13 · 1113 阅读 · 0 评论 -
多核多线程同步
from: http://book.51cto.com/art/201009/224283.htm1.2.6 多核多线程同步本书多线程的实现主要是在Windows平台上,因此WinThread和OpenMP是最主要的实现。多线程实现的核心是并行,并行的难点是同步。因为往往会导致程序出错或者效率不高。那么什么是同步?我们知道多线程的程序设计中需要实现多个线程共享同一段代码,转载 2012-10-21 01:14:15 · 2024 阅读 · 0 评论 -
孤儿进程和守护进程
from:http://www.linuxidc.com/Linux/2011-02/32125p3.htm通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程。现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程 如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 ini转载 2012-11-22 11:41:45 · 866 阅读 · 0 评论 -
Unix: 控制终端
from:http://www.cnblogs.com/jack204/archive/2012/06/02/2531697.htmljobs,fg和bg是控制进程(任务)执行的命令。jobs显示在当前shell环境下任务的状态:正在后台运行的任务,已经终止,以及被停止 (stopped)的任务。键入Control-Z,当前控制终端的前台任务会收到STOP信号从而被停止转载 2012-11-22 11:40:33 · 685 阅读 · 0 评论 -
多线程---自旋锁、互斥锁区别
何谓自旋锁?它是为为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环转载 2012-12-10 14:41:10 · 566 阅读 · 0 评论 -
管理处理器的亲和性(affinity)
简介: 了解 Linux® 2.6 调度器如何处理 CPU 亲和性(affinity)可以帮助您更好地设计用户空间的应用程序。软亲和性(affinity) 意味着进程并不会在处理器之间频繁迁移,而 硬亲和性(affinity) 则意味着进程需要在您指定的处理器上运行。本文介绍了当前的亲和性(affinity)机制,解释为什么和如何使用亲和性(affinity),并给出了几个样例代码来显示如何使用这转载 2013-09-23 10:01:42 · 739 阅读 · 0 评论 -
线程私有数据
这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线程库API。本文是第二篇将向您讲述线程的私有数据。0 评论:杨沙洲 (pubb@163.net), 工程师, 自由撰稿人2001 年 10 月 01 日内容概念及作用在单线程程序中,我们经常要用到转载 2014-02-18 20:26:54 · 806 阅读 · 0 评论 -
Linux用户空间与内核空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。于是像linux这样的系统就做了一个约定,不允许没有用户空间上下文的内核线程访问用户空间。不允许内核访问用户空间使内核免去了很多的负担,使内核设计更加简化转载 2014-07-02 10:54:40 · 2823 阅读 · 1 评论 -
Sessions and Process Groups
This chapter is from the bookLinux Application Development, 2nd Edition In Linux, as in other Unix systems, users normally interact with groups of related processes. Althou转载 2016-10-28 20:44:01 · 548 阅读 · 0 评论