发布时间:2013-06-29 12:33:53
对于本地进程间通信,普通管道提供了相关进程(都有想相同的祖先)之间通信的一种方法,但是普通管道存在两种局限性。首先它只能在相关进程间使用,其次它是半双工的,即使一些系统提供全双工的管道但为了可移植性,我们不应作此假设。命名管道解决了第一个局限性,他能在不相关的进程之间进行数据通信,但是同样具有第二.........【阅读全文】
发布时间:2013-06-22 10:10:24
历史上管道时半双工的,即数据同一时刻只能在一个方向上流动。现在一些系统提供全双工的管道。但是为了可移植性,我们不应该假定系统提供了此特性。所以通常仍旧是使用半双工的管道。pipe函数用来创建一个管道#include<unistd.h>int pipe(int filedes[2]); 成功返回0,出错返回-1经由参数filedes返回两个文件描述符.........【阅读全文】
发布时间:2013-06-16 10:08:26
设想一个情景一个服务器在等待任意客户的到来,并接受客服传来的数据,然后对数据处理后再返还给客户。然后客户离开。服务器继续等待。但是如果某一时刻服务器响应了一个客户A的服务请求,但是由于一些原因,该客户A确不能立刻将数据传递给服务器。于是导致服务器阻塞在等待该客户的A数据到来。如果这个时候另一个客户B .........【阅读全文】
发布时间:2013-06-03 20:54:55
线程同步简单的说就是当多个线程共享相同的内存时,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容时不会访问到无效的数值。我们来看个上面一个对于多线程访问共享变量造成竞争的一个例子假设增量操作分为以下三个步骤(1)从内存单.........【阅读全文】
发布时间:2013-06-03 13:24:29
下面的测试程序我们都省略错误检查如同进程可以调用atexit函数安排在他退出时需要调用的函数一样,进程也可以安排在他退出时调用的函数。这些清理函数记录在栈中,所以他们执行的顺序和注册的顺序是相反的。#inclduevoid pthread_cleanup_push(void (*rtn)(void *),void *arg);void pthread_clean.........【阅读全文】