浅墨浓香

想要天亮进城,就得天黑赶路。

导航

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 38 下一页

2017年2月27日

摘要: 1. 线程的状态转换 【说明】当线程调用pthread_cond_wait进入“等待Blocked”状态时,由于pthread_cond_wait内部会释放mutex同步锁,在这期间这个锁可能被其他线程所获得,因此线程还得等待mutex锁的释放而进入“锁定blocked”状态。 2. 线程限制 (1 阅读全文

posted @ 2017-02-27 21:52 浅墨浓香 阅读(315) 评论(0) 推荐(0) 编辑

2017年2月21日

摘要: 5.6 死锁 (1)死锁:两个线程试图同时占用两个资源,并按不同的次序锁定相应的共享资源。 (2)解决方案: ①方案1:按相同的次序锁定相应的共享资源 ②方案2:使用pthread_mutex_trylock(),它是pthread_mutex_lock()函数的非阻塞版。 【编程实验】死锁 //d 阅读全文

posted @ 2017-02-21 23:39 浅墨浓香 阅读(298) 评论(0) 推荐(0) 编辑

摘要: 5.5 线程信号量 5.5.1 信号量函数简介 (1)信号量(semaphore)从本质上是一个非负整数计数器,是共享资源的数目,通常被用来控制对共享资源的访问。 (2)信号量可以实现线程的同步和互斥 (3)通过sem_post()和sem_wait()函数对信号量进行加减操作,从而解决线程的同步和 阅读全文

posted @ 2017-02-21 15:37 浅墨浓香 阅读(389) 评论(0) 推荐(1) 编辑

2017年2月20日

摘要: 5.4 条件变量 5.4.1 条件变量简介 (1)互斥锁的缺点是它只有两种状态:锁定和非锁定。 (2)条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足。 (3)条件变量内部是一个等待队列,放置等待的线程,线程在条件变量上等待和通知。互斥锁用于pthread_cond_wait 阅读全文

posted @ 2017-02-20 23:29 浅墨浓香 阅读(372) 评论(0) 推荐(1) 编辑

2017年2月19日

摘要: 5.3 读写锁 (1)读写锁简介 ①线程使用互斥锁缺乏读并发性 ②当读操作较多,写操作较少时,可使用读写锁提高线程并发性 ③读写锁数据类型:pthread_rwlock_t (2)读写锁的操作 ①创建和释放读写锁 头文件 #include <pthread.h> 函数 int pthread_rwl 阅读全文

posted @ 2017-02-19 13:08 浅墨浓香 阅读(498) 评论(0) 推荐(0) 编辑

2017年2月18日

摘要: 5. 线程的互斥和同步 5.1 同步和互斥的概念 (1)线程同步:是一个宏观概念,在微观上包含线程的相互排斥和线程的先后执行的约束问题。解决同步方式一般采用条件变量和信号量。 (2)线程互斥:线程执行的相互排斥(注意,它不关心线程间执行的先后顺序!)。解决互斥一般使用互斥锁、读写锁和信号量。 【编程 阅读全文

posted @ 2017-02-18 23:08 浅墨浓香 阅读(331) 评论(0) 推荐(1) 编辑

摘要: 3. 线程清理和控制函数 (1)线程清理函数,线程在退出时需要调用的函数,这与进程在退出时要用atexit注册的函数类似 (2)线程可以创建多个线理清理处理程序(thread cleanup handler)。这些处理程序记录在栈中,也就是执行顺序与它们注册的顺序相反。 头文件 #include < 阅读全文

posted @ 2017-02-18 20:08 浅墨浓香 阅读(540) 评论(0) 推荐(1) 编辑

摘要: 2. 线程的创建和终止 (1)创建函数:pthread_create 头文件 #include <pthread.h> 函数 int pthread_create(pthread_t* tidp, const pthread_attr_t* attr, void*(*start_rtn)(void* 阅读全文

posted @ 2017-02-18 17:48 浅墨浓香 阅读(347) 评论(0) 推荐(0) 编辑

摘要: 1. 引言 1.1 线程的概念 (1)进程是资源管理的最小单位,线程是程序执行的最小单位 (2)每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程,它包含独立的栈和CPU寄存器状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包括打开的文件、内存页面、信号标识及动态分配 阅读全文

posted @ 2017-02-18 14:42 浅墨浓香 阅读(360) 评论(0) 推荐(0) 编辑

2017年2月16日

摘要: 4. 贯穿案例2:mini shell(3) (1)之前存在问题 ①刚运行时,mshell作为前台进程。运行的其他命令会被加入新的进程组,并且调用tcsetpgrp将这个进程组设置为前台进程组,因此mshell本身所在的进程组就成为后台进程组 ②SIGTTIN信号表示后台进程组的成员读控制终端时会产 阅读全文

posted @ 2017-02-16 14:14 浅墨浓香 阅读(283) 评论(0) 推荐(0) 编辑

摘要: 3.5 信号集和信号屏蔽 (1)信号集函数:信号集为一个或多个信号的集合,主要用在信号屏蔽函数中 (2)主要的信号集函数 头文件 #include <signal.h> 函数 ①int sigemptyset(sigset_t* set);// set为信号集,将信号集清空,对应将所有信号屏蔽字置0 阅读全文

posted @ 2017-02-16 13:04 浅墨浓香 阅读(315) 评论(0) 推荐(0) 编辑

2017年2月15日

摘要: 3.2 中断的系统调用 (1)进程调用“慢”系统调用时,如果发生了信号,内核会重启系统调用(即“慢”系统调用被信号中断后,当信号处理完毕后,该系统调用会被重新从头开始执行,而不是从中断的地方继续执行!注意,这是重启的方式。除此之处,还有设置SA_RESTART和忽略信号等方式) (2)慢系统调用 ① 阅读全文

posted @ 2017-02-15 17:46 浅墨浓香 阅读(688) 评论(0) 推荐(0) 编辑

摘要: 3. 信号模型及信号屏蔽 3.1 信号的可靠性 (1)与信号相关的数据结构 ①struct sigpending结构体:。包括一个信号队列和一个信号位图。其中的signal域保存所有待处理信号的集合。因每个信号占一位,该域也可被为信号未决字或信号接收位图)。 ②blocked字段:进程的信号屏蔽字( 阅读全文

posted @ 2017-02-15 16:24 浅墨浓香 阅读(737) 评论(0) 推荐(0) 编辑

2017年2月7日

摘要: 2. 信号发送的函数 2.1 安装信号处理函数:signal (1)signal函数 头文件 #include <signal.h> 函数 void (*signal(int signo, void(*func)(int)))(int); 返回值 若成功则返回先前的信号处理函数指针,出错则返回SIG 阅读全文

posted @ 2017-02-07 18:17 浅墨浓香 阅读(355) 评论(0) 推荐(0) 编辑

摘要: 1. 信号的基本概念 1.1 基本概念 (1)信号(signal)机制是linux系统中最为古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化。 (2)信号本质上是在软件层次上对中断机制的一种模拟,是一种软件中断。 (3)信号是异步事件 ①不可预见; ②信号 阅读全文

posted @ 2017-02-07 12:16 浅墨浓香 阅读(410) 评论(0) 推荐(0) 编辑

2017年1月31日

摘要: 5. 贯穿案例2:mini shell(2) (1)己经完成的功能:pwd、cd、exit命令 (2)阶段性目标: ①env、export、echo及其他命令 ②标准输入、输出重定向">"、"<"、">>" ③设置后台进程 (3)存在问题:当mshell(后台进程)要读写终端时(如执行date时), 阅读全文

posted @ 2017-01-31 23:57 浅墨浓香 阅读(283) 评论(0) 推荐(0) 编辑

摘要: 4. 前台进程组 (1)前台进程组 ①自动接受终端信号的组称为前台进程组 ②在终端通过ctrl+c等动作产生的信号首先被前台进程组接受。 ③在shell启动的若干个进程组默认是父进程所在的组为前台进程组,其他进程组则为后台进程组 ④除非是默认,否则都要通过调度才能成为前台进程组 (2)获取/设置前台 阅读全文

posted @ 2017-01-31 17:25 浅墨浓香 阅读(385) 评论(0) 推荐(0) 编辑

2017年1月30日

摘要: 3. 进程组和组长进程 (1)进程组 ①一个或多个进程的集合; ②可以接受同一终端的各种信号,同一个信号发送进程组就等于发送给组中的所有进程。 ③每个进程组有唯一的进程组ID ④进程组的消亡要等到组中所有的进程结束; ⑤kill发送信号组进程组:kill -9 -进程组号(注意进程组号前的“-”) 阅读全文

posted @ 2017-01-30 23:07 浅墨浓香 阅读(274) 评论(0) 推荐(0) 编辑

摘要: 2. 进程链和进程扇 (1)创建进程链 ①进程链:就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进程,这样依次往下循环,如下图所示。 ②关键实现:判断出如果是父进程则退出,保证父进程只会创建一个子进程。如果是子进程继续创建接下来的进程再退出。 【编程实验】构建进程链 //process 阅读全文

posted @ 2017-01-30 20:17 浅墨浓香 阅读(590) 评论(0) 推荐(0) 编辑

摘要: 1. 守护、孤儿和僵尸进程 (1)守护进程 ①守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,在系统关闭时终止。 ②所有守护进程都以超级用户(用户ID为0)的优先权运行。 ③守护进程没有控制终端 ④守护进程的父进程都是init进程(1号进程)。 (2)孤儿进程:父进程先结 阅读全文

posted @ 2017-01-30 11:25 浅墨浓香 阅读(313) 评论(0) 推荐(0) 编辑

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 38 下一页