摘要:
援引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正 阅读全文
摘要:
http://leetcode.com/onlinejudge#question_1 1 class Solution { 2 public: 3 vector<int> twoSum(vector<int> &numbers, int target) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 7 vector<int> result; 8 map<int, int> myma... 阅读全文
摘要:
April 5, 2013workjob-hunting,google,amazon,facebook0 Comments一年多前,出于显而易见的原因,下定决心肉身FQ。经过一番考虑,放弃了读书这条途径,决定直接找工作,通过H1B签证出去。于是去年八月份从百度辞职,开始着手准备。当时觉得今年拿到H1B的成功率大致能有个六七成,加上周围朋友们的不断鼓励,可以说还是相当自信的。然而,时至今日,在历经Google、Amazon、Facebook三家公司之后,这第一次尝试却可耻地失败了……战绩概览:Google:仓促应战,HR电面一轮,技术电面一轮,北京onsite两轮,惨败;Amazon:技术电面两 阅读全文
摘要:
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、基本概念软 阅读全文