
linux 高级编程
newnewman80
这个作者很懒,什么都没留下…
展开
-
linux 线程 信号量
原来总是用互斥锁(MUTEX)和环境变量(cond)去控制线程的通信,用起来挺麻烦的,用信号量(SEM)来通信控制就方便多了! 用到信号量就要包含semaphore.h头文件。 可以用sem_t类型来声明一个信号量。 用int sem_init(sem_t *sem, int pshared, unsigned int value)函数来初始化信号量,第一个参数就是用sem_t声明的信号量,转载 2012-08-23 09:23:35 · 610 阅读 · 0 评论 -
Linux进程内核栈
linux 内核栈 alloc_thread_info宏以获取一块空闲的内存区,用以存放新进程的thread_info结构和内核栈转载 2011-05-13 09:13:00 · 1274 阅读 · 0 评论 -
select()和poll()
在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问相关的的论题。使用非阻塞IO的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被执行。select()和poll的本质是一样的,前者在BSD UNIX中引入,后者在System V中引入。 select转载 2013-01-15 17:59:52 · 712 阅读 · 0 评论 -
Linux进程
1.Linux进程 Linux进程在内存中包含三部分数据:代码段、堆栈段和数据段。代码段存放了程序的代码。代码段可以为机器中运行同一程序的数个进程共享。堆栈段存放的是子程序(函数)的返回地址、子程序的参数及程序的局部变量。而数据段则存放程序的全局变量、常数以及动态数据分配的数据空间(比如用malloc函数申请的内存)。与代码段不同,如果系统中同时运行多个相同的程序,它们不能使用同一堆栈段转载 2012-11-06 10:47:06 · 702 阅读 · 0 评论 -
wait函数和waitpid函数比较
wait函数和waitpid函数比较 wait 1.1 简介 wait函数所需头文件: #include #include wait函数原型: pid_t wait(int *status); 进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子 进程的信息,并转载 2012-11-05 17:59:40 · 6526 阅读 · 0 评论 -
线程与信号量
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。 ------函数sem_init()用来初始化一个信号量。 它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能转载 2012-08-23 10:57:03 · 774 阅读 · 0 评论 -
Linux信号量线程控制
线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁,信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制。 PV原语是对整数计数器信号量sem的操作,一次P操作可使sem减一,而一次V操作可是sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量的值大于零或等于零的时候,该进程(或线程)具有对公共资源访问的权转载 2012-08-23 09:58:00 · 601 阅读 · 0 评论 -
pthread_cond_wait()用法分析
很久没看APUE,今天一位朋友问道关于一个mutex的问题,又翻到了以前讨论过的东西,为了不让自己忘记,把曾经的东西总结一下。 先大体看下网上很多地方都有的关于pthread_cond_wait()的说明: 条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件转载 2012-08-22 15:45:00 · 619 阅读 · 0 评论 -
linux 线程常用函数
函数原型: #include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); 返回值:若是成功建立线程返回0,否则返回错误的编号转载 2011-03-30 10:30:00 · 1206 阅读 · 0 评论 -
POSIX多线程编程
前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题: 是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能: 1)有一int型全局变量g_Flag初始值为0; 2) 在主线称中起动线程1,打印“this is thread1”,并将g_F转载 2012-08-21 13:12:14 · 692 阅读 · 0 评论 -
pthread_cond_timedwait 代替sleep
linux多线程编程,你还在用sleep么?用pthread_cond_timedwait吧 摘要:多线程编程中,线程A循环计算,然后sleep一会接着计算(目的是减少CPU利用率);存在的问题是,如果要关闭程序,通常选择join线程A等待线程A退出,可是我们必须等到sleep函数返回,该线程A才能正常退出,这无疑减慢了程序退出的速度。当然,你可以terminate线程A,但这样做很转载 2012-08-21 13:16:31 · 2384 阅读 · 0 评论 -
工作队列版本差别
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。 工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。 I、转载 2013-11-07 09:12:43 · 1089 阅读 · 0 评论