12.7 取消一个线程
有时,想让一个线程可以要求另一个线程终止,就像给它发送一个信号一样。线程有方法可以做到这一点,与与信号处理一样,线程可以被要求终止时改变其行为。
pthread_cancel是用于请求一个线程终止的函数:
#inlude
int pthread_cancel(pthread_t thread);这个函数提供一个线程标识符就可以发送请求来取消它。
线程可以用p...
分类:
编程语言 时间:
2015-07-07 11:07:33
阅读次数:
120
12.6 线程的属性
在前面的所有程序示例中,都在程序退出之前用pthread_join对线程再次进行同步,如果想让线程向创建它的线程返回数据就需要这样做.但有时,也有这种情况,既不需要第二个线程向主线程返回信息,也不想让主线程等待它的结束.
假设在主线程继续为用户提供服务的同时创建了第二个线程,新线程的作用是将用户正在编辑的数据文件进行备份存储.备份工作结束后,第二个线程就可以直接终止...
分类:
编程语言 时间:
2015-07-07 09:35:03
阅读次数:
163
12.5.2 用互斥量进行同步
另一种在多线程程序中的同步访问方法是使用互斥量.它允许程序员锁住某个对象,使得每次只能有一个线程访问它.为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁它.
用于互斥量的基本函数和用于信号量的函数非常相似,它们的定义如下所示:
#include
int pthread_mutex_init(pthread_mute...
分类:
系统相关 时间:
2015-07-06 14:22:06
阅读次数:
181
第12章 POSIX线程
在第11章中,介绍了如何在linux中处理进程.但有时人们认为,用fork调用来创建新进程的代价太高.在这种情况下,如果能让一个进程同时做两件事情或者至少看起来是这样会非常有用,而且,人们页希望能有两件或更多的事情以一种非常紧密的方式同时发生,这就需要线程发挥作用了.
12.1 什么是线程
在一个程序中多个执行路线就叫做线程(thread).更准确的定义...
分类:
编程语言 时间:
2015-07-05 12:28:29
阅读次数:
204
11.4.2 信号集
头文件signal.h定义了类型sigset_t和用来处理信号集的函数.sigaction和其他函数.sigaction和其他函数将用这些信号集来修改进程在接收到信号时的行为.
#include
int sigaddset(sigset_t *set, int signo);
int sigemptyset(sigset_t *set);
int sig...
分类:
系统相关 时间:
2015-07-05 09:45:47
阅读次数:
208
11.4.1 发送信号
进程可以通过调用kill函数向包括它本身在内的其他进程发送一个信号.如果程序没有发送该信号的权限,对kill函数的调用就将失败,失败的常见原因是目标进程由另一个用户所拥有.这个函数和同名的shell命令完成相同的功能,它的定义如下所示:
#include
#include
int kill(pid_t pid, int sig);kill函数把参数sig给定...
分类:
系统相关 时间:
2015-07-04 09:45:41
阅读次数:
281
Linux文件目录的作用:/根目录│├boot/启动文件。Linux的内核及引导系统程序所需要的文件目录,比如vmlinuzinitrd.img文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;│└grub/Grub引导器相关的文件│├dev/设备文件。设备文件用特定的约定命..
分类:
系统相关 时间:
2015-07-03 16:15:06
阅读次数:
214
11.4 信号量
信号是UNIX和linux系统响应某些条件而产生的一个事件.接收到该信号的进程会相应地采取一些行动.用术语生成(raise)表示一个信号的产生,使用术语捕获(catch)表示接收一个信号.信号是由于某些错误条件而生成的,例如内存段冲突,浮点处理器错误或非法指令等.它们由shell和终端处理器生成来引起中断,它们还可以作为在进程间传递消息或修改行为的一种方式,明确地由一个进...
分类:
系统相关 时间:
2015-07-03 09:18:55
阅读次数:
246
11.3 启动新进程
可以在程序的内部启动另一个程序,从而创建一个新进程.这个工作可以通过库函数system来完成.
#include
int system(const char *string);
system函数的作用是,运行以字符串参数的形式传递给它的命令并等待该命令的完成.命令的执行情况就如同在shell中执行如下命令:
$ sh -c string
如果无法启动she...
分类:
系统相关 时间:
2015-07-02 10:22:33
阅读次数:
149
strace和ltrace分别对应的是系统调用和库函数调用,
系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件。
而库函数调用则面向的是应用开发的,相当于应用程序的api,常见的lib有openssl、libxml等。
前者属于内核层,后者属于用户层,下面有其层次对应图
引用《UNIX环境高级编程》对这两个概念的区别描述如下:...
分类:
其他好文 时间:
2015-07-01 18:23:07
阅读次数:
241