文章分类 - 学习资料 - linux
摘要:分类:Linux2008-09-06 14:341546人阅读评论(0)收藏举报linuxsocketsstruct平台unixsystem引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex是Fast Userspace muTexes的缩写,由Hubertus Franke, Matthew Kirkwood, Ingo Molnar and Rusty Rus
阅读全文
摘要:援引CU上一篇帖子的内容:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不一定是锁定某一个资源,而是流程上的概念,比如:有A,B两个线程,B线程要等A线程完成某一任务以后再进行自己下面的步骤,这个任务 并不一定是锁定某一资源,还可以是进行一些计算
阅读全文
摘要:之前一直没有怎么关注过这个问题,前些日子在面试一家公司的时候,面试官提到了pthread_cond_wait/pthread_cond_signal的实现,当时答的不是很好,回来就查了nptl的代码。前天,水木上又有人问到了信号量和互斥锁的问题,我想还是对它们的区别与实现总结一下。首先了解一些信号量和线程互斥锁的语义上的区别:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
阅读全文
摘要:Linux 线程锁,条件变量 信号量的区别分类:Linux程序开发2011-03-25 19:55612人阅读评论(0)收藏举报linuxsignalsemaphorebufferthreadreturning一) 线程锁1) 只能用于"锁"住临界代码区域2) 一个线程加的锁必须由该线程解锁.锁几乎是我们学习同步时最开始接触到的一个策略,也是最简单, 最直白的策略.二) 条件变量,与锁不同, 条件变量用于等待某个条件被触发1) 大体使用的伪码:// 线程一代码pthread_mutex_lock(&mutex);// 设置条件为truepthread_cond_si
阅读全文
摘要:作者:CppExplore 网址:http://www.cppblog.com/CppExplore/为了后面写的《网络模型(二)》,多写一篇关于线程的。线程使用涉及的主要数据结构以及应用框架可以参考http://www.cppblog.com/CppExplore/archive/2008/01/15/41175.html。本文的主要目的是给出linux下实用的线程消息队列实现。一、linux上线程相关的操作有下面几种:(1)pthread_t类型的创建、属性创建设置等。这类具体可以:man pthread_creat; man pthread_attr_init;man pthread_d
阅读全文
摘要:分类:linux应用程序2008-04-08 09:434896人阅读评论(2)收藏举报semaphorestructnulljobs工作initialization进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法得知那个线程会先运行,哪个线程会后运行。下面介绍一些技术,通过他们,你会合理安排你的线程之间对资源的竞争。l互斥量Mutexl信号灯Semophorel条件变量Conditions先说一下互斥量。什么时候会用上互斥量了?比如你现在有一全局链表,你有几个工作线程。每一个线程从该链表中取出头节点,然后对该头节点进行处理。比如现在线程1正
阅读全文
摘要:pthread_cond_wait()用法分析多线程编程中,发现同步和互斥的手段中,条件变量见到的是最少的。后来查找资料发现:使用信号量完全可以模拟条件变量,而且通常更加具有优势。可以用信号量模拟锁和条件变量:1) 锁,在同一个线程内同时对某个信号量先调用sem_wait再调用sem_post, 两个函数调用其中的区域就是所要保护的临界区代码了,这个时候其实信号量是作为二值计数器来使用的.不过在此之前要初始化该信号量计数为1,见下面例子中的代码.2) 条件变量,在某个线程中调用sem_wait, 而在另一个线程中调用sem_post.不过, 信号量除了可以作为二值计数器用于模拟线程锁和条件变量
阅读全文
摘要:分类:linux2009-06-19 09:3337142人阅读评论(24)收藏举报多线程linuxsemaphoresystemlinux内核signal很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。今天终于下了决心,写点东西,以后可以再修修补补也无妨。一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都写那种int main()到底的代码的人,那么或多或少你会遇到代码响应不够用的情况,也应该有
阅读全文
摘要:分类:C语言2009-04-30 23:2684346人阅读评论(145)收藏举报数据结构编译器windowsbyte存储扩展一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一
阅读全文
摘要:引子:1.在Linux系统中,进程状态除了我们所熟知的TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。这表明这个进程处于什么状态?2.strace可以方便的帮助我们记录进程所执行的系统调用,它是如何跟踪到进程执行的?3.gdb是我们调试程序的利器,可以设置断点,单步跟踪程序。它的实现原理又是什么?所有这一切的背后都隐藏着Linux所提供的一个强大的系统调用ptrace().1.ptrace系统调用ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的
阅读全文
摘要:Posted on2007-08-30 14:05OldHawk阅读(31460) 评论(8)编辑收藏信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。1、基本概念软
阅读全文
摘要:linux用户态和内核态切换理解Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成操作
阅读全文
摘要:dccmx 于 2012年 五月 5日 发表 | 最后修改于 2012年 五月 8日写网络程序躲不过协议,协议其实就是定义了消息的格式,以及消息是如何交换的。协议可简单可复杂,复杂精密如TCP协议,简单奔放如HTTP的协议。这里将我所接触到的协议稍微总结一下,最后抛出一个个人设计的简单通用的文本协议。设计一个协议不是一件很容易的事情,尤其是当对设计的要求包含很好的描述性和可扩展性的时候。如果再将效率考虑在内,则更是件耗脑力的活。在继续讨论下去之前,先看看现有的一些协议吧。这里主要讨论的是应用层的协议,应用层的协议大多是请求响应模式(除了zeromq这个变态的家伙,后面再说),所以这里侧重讨论消
阅读全文
摘要:dccmx 于 2012年 十二月 10日 发表 | 最后修改于 2012年 十二月 10日http://blog.dccmx.com/2012/12/build-perfect-monitoring-system/对于任何一个互联网公司来说,监控系统都是不可或缺的。监控系统的完善程度,直接影响到系统的稳定程度,性能等各个方面。关于监控系统的搭建,网上已经有了很多方案,在规划公司的监控体系的时候,我也参考了很多解决方案。比较常见的有:nagios,cacti,icinga,zabbix,ganglia,还有收费的监控服务有如newrelic等。考察了一圈下来,发现各有所长,又各有重叠。n...
阅读全文
摘要:那些“cache”和“buffer”(一)dccmx 于 2011年 六月 13日 发表 | 最后修改于 2012年 三月 16日江湖人称:cache is king。还有个与之类似的是buffer。这里就谈谈buffer和cache。那么他们到底是用来干什么的呢?其实他们就是在两个相对独立的系统之间的一个中间层,用来避免这两个系统之间不必要的交互和不不必要的或者重复的同步。同步,你懂的,不同数量级系统之间的同步,你也懂的。比如内存和磁盘之间,比如应用和数据库之间。buffer针对写,cache针对读。这篇文章先来看看Linux里面系统的那些cache和buffer(至于硬件里面的一些cach
阅读全文

浙公网安备 33010602011771号