文章分类 -  linux进程、线程

摘要:百度首页|登录注册新闻网页贴吧知道音乐图片视频地图百科文库帮助首页自然文化地理历史生活社会艺术人物经济科技体育图片数字博物馆核心用户百科商城进程调度百科名片进程调度无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。目录基本属性基本状态处理机方式算法实现功能展开基本属性基本状态处理机方式算法实现功能展开编辑本段基本属性1.多态性 从诞生、运行,直至消灭。进程调度2.多个不同的进程可以包括相同的程序3.三种基本状态 它们之间可进 阅读全文
posted @ 2013-07-10 21:51 z折腾 阅读(776) 评论(0) 推荐(0)
摘要:例如:这里会发生什么状况 int main() { pthread_create();//此线程陷入死循环 return 0; }程序立马结束;应为pthread_create并不需要等待函数返回;产生一个线程后;继续执行。 阅读全文
posted @ 2013-07-10 21:31 z折腾 阅读(352) 评论(0) 推荐(0)
摘要://c语言线程池实现#ifndef __THREADPOOL__#define __THREADPOOL__#ifdef __cplusplusextern "C" {#endif //#endif#include#include#include#include#include#include/**线程池里所有运行和等待的任务都是一个CThread_Worker*由于所有任务都在链表里,所以是一个链表结构*/typedef struct Worker{ /*回调函数,任务运行时会调用此函数*/ void (*process)(void *arg); void *arg;/* 阅读全文
posted @ 2013-07-10 21:26 z折腾 阅读(344) 评论(0) 推荐(0)
摘要:在一个进程里,线程的调度有抢占式或者非抢占的模式。在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU分配给在等待队列的下一个线程。所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。实际上,系统运行每个进程的时间有2毫秒,然后调度其他的线程。它同时他维持着所有的线程和循环,分配很少量的CPU时间给线程。线程的的切换和调度是如此之快,以至于感觉是所有的线程 阅读全文
posted @ 2013-07-10 21:23 z折腾 阅读(1388) 评论(0) 推荐(0)
摘要:线程应用程序最常见导致创建线程失败的原因是线程栈大小的设置。创建一个新的线程,默认情况下系统为线程栈预留了2MB的寻址空间。线程栈起始于进程虚拟内存的高端地址,并向虚拟内存底端地址方向扩展。取决于线程本身的大小以及其它线程内存分配的情况,进程虚拟地址空间消耗过快可能导致创建线程失败。这里有一个测试程序可以看到,Linux下最多可以创建多少个线程。#include #include #include void *ThreadFunc(){ static int count = 1; printf ("Create thread %d\n", count); pthread_d 阅读全文
posted @ 2013-07-10 21:22 z折腾 阅读(4507) 评论(0) 推荐(0)
摘要:所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程) 阅读全文
posted @ 2013-07-09 23:24 z折腾 阅读(131) 评论(0) 推荐(0)
摘要:作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。1. 多线程我们先来看一下什么是多线程。在Linux从程序到进程中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有一个控制权的存在。当函数被调用的时候,该函数获得控制权,成为激活(active)函数,然后运行该函数 阅读全文
posted @ 2013-07-09 23:23 z折腾 阅读(202) 评论(0) 推荐(0)
摘要:作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!计算机如何执行进程呢?这可以说是计算机运行的核心问题。即使我们已经编写好程序,但程序是死的文本,只有成为活的进程才能带来产出。我们已经从Linux进程基础中了解了进程的一些概况。现在我们看一下从程序到进程的漫漫征程。1. 一段程序我们下面展示一个简单的C语言程序,我们假设该程序已经经过编译,成为可执行的程序文件vamei.exe。#include int glob=0; /*global va... 阅读全文
posted @ 2013-07-09 23:19 z折腾 阅读(207) 评论(0) 推荐(0)
摘要:线程同步简单的说就是当多个线程共享相同的内存时,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容时不会访问到无效的数值。我们来看个上面一个对于多线程访问共享变量造成竞争的一个例子假设增量操作分为以下三个步骤(1)从内存单元读入寄存器(2)在寄存器中进行变量值的增加(3)把新的值写回内存单元那么当两个 非同步线程对同一个变量做增操作时就可能出现下面这种情况也就是说如果两个人线程试图在几乎在同一时刻对同一个变量做增操作而不进行同步的话。结果就可能出现不一致。变量的值可能比原来增加了一也可能比原来的值增加了2.具体是1还是2. 阅读全文
posted @ 2013-07-09 22:29 z折腾 阅读(558) 评论(0) 推荐(0)
摘要:pthread_cond_wait() 了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。 首先,让我们考虑以下情况:线程为查看已链接列表而锁定了互斥对象,然而该列表恰巧是空的。这一特定线程什么也干不了 -- 其设计意图是从列表中除去节点,但是现在却没有节点。 因此,它只能: 锁定互斥对象时,线程将调用 pthread_cond_wait(&mycond,&mymutex)。pthread_cond_wait() 调用相当复杂,因此我们每次只执行它的一个操作。 pthread_cond_wa... 阅读全文
posted @ 2013-07-09 22:23 z折腾 阅读(216) 评论(0) 推荐(0)
摘要:#include #include #include //互斥变量和条件变量静态初始化pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/void *thread1(void *);void *thread2(void *);int i=1;int main(void){ // sleep(30); pthread_t t_a; pthread_t t_b; pthread_create(&... 阅读全文
posted @ 2013-07-08 23:42 z折腾 阅读(226) 评论(0) 推荐(0)
摘要:信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将AcquireSemaphoreVI以及ReleaseSemaphoreVI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。一、描述 以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同... 阅读全文
posted @ 2013-05-30 23:56 z折腾 阅读(550) 评论(0) 推荐(0)