浅墨浓香

想要天亮进城,就得天黑赶路。
随笔 - 743, 文章 - 16, 评论 - 87, 阅读 - 53万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

02 2017 档案

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

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

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

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

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

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

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

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

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

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

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

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

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

posted @ 2017-02-18 20:08 浅墨浓香 阅读(560) 评论(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 浅墨浓香 阅读(350) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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