07 2009 档案

摘要:第13章 进程间通信:管道在第11章,我们了解了使用信号在两个进程之间发送消息的一个简单方法。我们创建了可以用来引起响应的通知事件,但是所传递的信息限制于一个信号数量。在这一章,我们将会了解管道,这会允许在进程之间交换更为有用的数据。在本章的结尾,我们将会使用我们的新知识来重新将CD数据库程序实现为一个非常简单的客户/服务器程序。在本章,我们将会涉及下列主题:管道的定义处理管道管道调用父子进程有名管道:FIFO客户端/服务器方法什么是管道?当我们由一个进程到另一个进程连接数据流时我们使用术语管道。通常我们将一个进程的输出连接到另一个进程的输入。大多数Linu用户已经很熟悉将shell命令连接到 阅读全文
posted @ 2009-07-31 15:41 jlins 阅读(431) 评论(0) 推荐(0) 编辑
摘要:线程属性-调度下面我们来看一下我们也许希望改变的第二个线程属性:调度。改变调度属性与设置分离属性相类似,但是我们可以使用另外两个函数来查找可用的等级级别,sched_get_priority_max与sched_get_priority_min。试验--调度因为thread6.c是与前面的例子十分类似,这里我们只看一下其中的区别。1 首先,我们需要一些额外的变量:int max_priority;int min_priority;struct sched_param scheduling_value;2 在我们设置分离属性之后,我们设置调度策略。res = pthread_attr_setsc 阅读全文
posted @ 2009-07-23 18:24 jlins 阅读(258) 评论(0) 推荐(0) 编辑
摘要:线程属性当我们第一次了解线程时,我们并没有讨论线程属性的问题。我们现在会进行讨论。线程有许多我们可以控制的属性。然而,在这里我们只讨论那些我们最需要的线程属性。其他属性的详细信息可以在手册中了解到。在所有我们前面的例子中,我们不得不在允许程序退出之前使用pthread_join来重新同步我们的线程。如里我们希望允许一个线程向创建他的线程返回数据时我们需要这样做。有时我们并不需要第二个线程向主线程返回信息,也不希望主线程等待第二个线程。假设我们创建了第二个线程来备份正在编辑的数据文件的一份拷贝,而主线程继续向用户服务。当备份完成时,第二个线程只是简单的退出,并没有需要与主线程聚合。我们可以创建类 阅读全文
posted @ 2009-07-21 18:02 jlins 阅读(184) 评论(0) 推荐(0) 编辑
摘要:使用互斥同步在多线程程序中同步访问的另一个方法就是使用互斥,其作用允许程序锁住一个对象,从而只有一个线程可以访问他。要控制对临界区代码的访问,在我们进入这段代码之前锁住一个互斥量,并且在我们完成操作时进行解锁。使用互斥所需要基本函数与信号量所需要的函数相似,其声明如下:#include <pthread.h>int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t*mutexattr);int pthread_mutex_lock(pthread_mutex_t *mutex);int pthr 阅读全文
posted @ 2009-07-19 15:06 jlins 阅读(172) 评论(0) 推荐(0) 编辑
摘要:并发执行下面我们将要编写一个检测两个线程是否并发执行的程序。因为我们还没有了解要有效完成这一任务所需要的线程同步的知识,所以这并不是一个高效完成在线程之间称之为池操作的程序。再一起说明,我们要利用这一事实,在一个进程内部的不同线程之间共享除了局部函数变量之外的所有变量。试验--两个线程的同步执行在这一部分,我们所创建的程序thread2.c,是对thread1.c进行了简单的修改而得来的。我们添加一个额外的文件域变量来测试哪一个线程正在运行:int run_now = 1;当主函数执行时我们将其设置为1,而当我们的新线程执行时我们将其设置为2。在main函数时,在新线程创建之后,我们添加下面的 阅读全文
posted @ 2009-07-08 18:21 jlins 阅读(214) 评论(0) 推荐(0) 编辑
摘要:第一个线程程序有一个完整的与线程相关的库调用集合,其中的大多数名字以pthread_开头。要使用这些库调用,我们必须定义宏_REENTRANT,包含文件pthread.h,并且使用-lpthread来链接线程库。当设计原始的Unix与POSIX库函数时,假定在任何进程中只有一个执行线程。一个明显的例子就是errno,这个变量用于在调用失败之后获取错误信息。在一个多线程程序中,默认情况下只有一个在线程之间共享的变量。一个线程中的调用可以很容易在另一个线程获取前一个错误代码之前更新这个变量。相似的程序也存在于函数中,例如fputs,通常使用一个全局区域用于缓存输出。我们需要被称之为可重入的例程。重 阅读全文
posted @ 2009-07-05 10:32 jlins 阅读(216) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示