- 博客(9)
- 收藏
- 关注
原创 如何实现信号屏蔽
紧接上一篇博客,接着分享一下信号屏蔽的具体内容以及如何实现信号屏蔽。 Linux中常见信号量只有31个,所以进程PCB中表示常见的信号量只用一个字节表示就够了,进程得到了一个信号就是对应的一个bit位由0改变为1。信号被系统发送给一个进程,就是改变PCB中表示信号量的字节中对应的一个bit位。进程收到某一信号,相当于向表示信号量的字节中写入了一个信号量。 关于信号抵
2017-06-30 22:09:30 3262
原创 信号相关概念
我记得我在进程间通信的时候说到过一种方式——信号量;终止在linux命令行上正在运行的可执行程序所用的ctrl+c,也属于一种信号(是常见SIGINT信号),所以,今天我想具体分享一下与信号相关的一些概念。 Linux中信号共有64个,常见信号量只有31个,利用kill -l命令就可以用来查看全部信号,如下图所示: 首先从信号的处理的三种方式说起。 1>
2017-06-30 21:29:22 1378
原创 线程安全和可重入函数
线程安全基于多线程程序(多执行流),单线程程序几乎不存在线程安全问题。 简单来说,在运行环境一致的情况下,多次运行同一个多线程程序时,所有线程结果和单线程运行得到的结果一致时,则可以说该程序的线程是安全的。反之,则为线程不安全。 引起线程安全问题的原因: 通常都是由全局变量及静态变量的。 若每个线程中对全局变量、静态变量只有读操作,而无写操作
2017-06-30 11:56:57 166
原创 子进程异步等待
今天来和大家分享一下子进程异步等待的方式。 我记得之前和大家分享过僵尸进程和孤儿进程,利用wait 和waitpid函数,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程已经结束正等待清理(也就是轮询的⽅式)。 采阻塞式等待,父进程阻塞了就不能处理自己的工作;采用非阻塞式等待,父进程在处理自己的工作时还可以时不时地轮询一下,查看是否有已经结束工作的子进程等待清理,程
2017-06-29 14:02:40 305
原创 介绍并实现简单的守护进程
今天来分享一下Linux下,由守护进程实现的大多数服务器,并能够完成许多系统任务。 守护进程是一种运行在后台的进程,又称精灵进程。它独立于控制终端并且周期的实现执行某种任务或等待处理某些发生的事件,且不受用户登陆和注销的影响(它们不与任何终端关联),它们每天24小时不停的运行。一般情况下,Linux系统的守护进程以.d结尾。 可用ps axj查看系统中的进程,今天我就不演示了,TP
2017-06-28 15:46:08 449
原创 GDB调试多进程多线程程序
各位好久不见哈!最近有点忙,好久没写博客了。今天我想和大家分享一下,用gdb简单调试多进程和多线程程序的代码和方法。 我们知道gdb是Linux环境下的代码调试工具。使用时,需要在源代码生成时加上-g选项。默认设置下,在调试多进程程序时gdb只会调试主进程。调试的结果会是这样,我以多进程调试来举例: 但是gdb(>V7.0)支持多进程的分别以及同时调试,换句话说
2017-06-27 16:59:29 310
原创 线程同步与互斥——实现互斥锁
今天我们来分享一下,线程同步与互斥——互斥锁的实现。 多个线程同时访问共享数据时可能会产生冲突,造成程序运行结果不是我们所预期的结果。 不产生冲突的多线程访问情况,代码和截图如下: 产生冲突的多线程访问情况,代码和截图如下: 注:每运行一次,结果都可能会不同。 由于多线程访问共享数据时可能会产生冲突,不能保证线程之间的同步与互斥。所以为了保证多线
2017-06-18 16:57:56 687
原创 线程
今天我们来分享一下,Linux下的线程的简单概念和相关实现及验证。 首先必须明确的一点是Linux下没有真正的线程,Linux下的线程是由进程来模拟的,因此Linux下的线程也被称为轻量级进程。 进程(PCB):承担分配资源的基本实体。 线程(TCB):调度的基本单位。而且线程是在进程内部运行的执行分支(执行流),线程其本质是在进程的地址空间上运行。
2017-06-09 09:12:53 217
原创 进程通信(IPC)——实现共享内存
今天分享一下,进程通信(IPC)——实现共享内存。 我们知道进程间通信的本质是让不同的进程看到同一内存。这之前我们用了不同的方式(管道,消息队列,信号量等等)让进程间能够通信,现在我们尝试着在共享内存中开辟一段内存,即共享内存,让需要通信的两个进程通过页表映射到共享内存上,从而各自得到一个能映射到这段共享内存的虚拟地址的指针,进程间即可通过含有虚拟地址的指针对共享内存进行相应读写操
2017-06-01 22:25:08 557
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人