摘要: 所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程) 阅读全文
posted @ 2013-07-09 23:24 z折腾 阅读(117) 评论(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折腾 阅读(198) 评论(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折腾 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 线程同步简单的说就是当多个线程共享相同的内存时,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容时不会访问到无效的数值。我们来看个上面一个对于多线程访问共享变量造成竞争的一个例子假设增量操作分为以下三个步骤(1)从内存单元读入寄存器(2)在寄存器中进行变量值的增加(3)把新的值写回内存单元那么当两个 非同步线程对同一个变量做增操作时就可能出现下面这种情况也就是说如果两个人线程试图在几乎在同一时刻对同一个变量做增操作而不进行同步的话。结果就可能出现不一致。变量的值可能比原来增加了一也可能比原来的值增加了2.具体是1还是2. 阅读全文
posted @ 2013-07-09 22:29 z折腾 阅读(525) 评论(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折腾 阅读(207) 评论(0) 推荐(0) 编辑