并发程序设计
文章平均质量分 78
-风裁尘-
这个作者很懒,什么都没留下…
展开
-
l6-d16 信号灯(信号量)
释放资源,如果没有线程阻塞在该sem上,表示没有线程等待该资源,这时该函数就对信号量的值进行增1操作,表示同类资源多增加了一个。如果至少有一个线程阻塞在该sem上,表示有线程等待资源,信号量为0,这时该函数保持信号量为0不变,并使某个阻塞在该sem上的线程从sem_wait函数中返回。// 1 : 释放资源,V操作 // -1 : 分配资源,P操作。获取资源,如果信号量为0,表示这时没有相应资源空闲,那么调用线程就将挂起,直到有空闲资源可以获取。// 要操作的信号灯的编号。原创 2023-08-26 22:15:16 · 50 阅读 · 0 评论 -
l6-d15 消息队列
消息队列是System V IPC对象的一种消息队列由消息队列ID来唯一标识消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等消息队列可以按照类型来发送/接收消息二、消息队列使用步骤打开/创建消息队列 msgget向消息队列发送消息 msgsnd从消息队列接收消息 msgrcv控制消息队列 msgctl发送端:1申请Key2打开/创建消息队列 msgget3向消息队列发送消息 msgsnd接收端:1打开/创建消息队列 msgget。原创 2023-08-25 21:41:29 · 57 阅读 · 0 评论 -
l6-d13、14 信号机制
信号是在上对的一种模拟,是一种方式linux内核通过信号通知用户进程,不同的信号类型代表不同的事件Linux对早期的unix信号机制进行了扩展进程对信号有不同的缺省方式忽略信号捕捉信号按键产生系统调用函数产生(比如raise, kill)硬件异常命令行产生 (kill)软件条件(比如被0除,访问非法内存等)常用信号信号名含义默认操作SIGHUP该信号在用户终端关闭时产生,通常是发给和该终端关联的会话内的所有进程终止SIGINT该信号在用户键入INTR字符。原创 2023-08-24 20:45:35 · 54 阅读 · 0 评论 -
l6-d12 共享内存
功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED( ((void *) -1) ),设置errno值。原创 2023-08-23 00:57:03 · 38 阅读 · 0 评论 -
l6-d10 线程池及gdb调试多线程
概念:通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合必要性:我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间当T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。线程池的基本结构:1任务队列,存储需要处理的任务,由工作线程来处理这些任务2。原创 2023-08-19 23:04:58 · 55 阅读 · 0 评论 -
l6-d9 条件变量和线程池
应用场景:生产者消费者问题,是线程同步的一种手段。必要性:为了实现等待某个资源,让线程休眠。提高运行效率使用步骤:初始化:静态初始化//初始化条件变量//初始化互斥量或使用动态初始化生产资源线程:开始产生资源//通知一个消费线程或者//广播通知多个消费线程消费者线程:while (如果没有资源){ //防止惊群效应有资源了,消费资源。原创 2023-08-19 15:19:30 · 41 阅读 · 0 评论 -
l6-d4 GDB 调试多进程程序
父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。只调试父进程或子进程的其中一个,(根据follow-fork-mode来决定),这是默认的模式。进程序号(1,2,3....) 切换GDB调试的进程。设置GDB跟踪调试单个进程或多个。设置GDB调试子进程。设置GDB调试父进程。显示GDB调试的进程。原创 2023-08-13 16:55:37 · 34 阅读 · 0 评论 -
l6-d3 守护进程
守护进程是Linux三种进程类型之一是 Linux 中的后台服务进程是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件始终在后台运行独立于任何终端周期性的执行某种任务或等待处理特定事件进程组(Process Group): 进程集合,每个进程组有一个组长(Leader),其进程 ID 就是该进程组 ID。会话(Session): 进程组集合,每个会话有一个组长,其进程 ID 就是该会话组 ID。原创 2023-08-13 16:38:50 · 41 阅读 · 0 评论 -
l6-d2 exec函数族
exec函数族进程调用exec函数族执行某个程序进程当前内容被指定的程序替换实现让父子进程执行不同的程序父进程创建子进程子进程调用exec函数族父进程不受影响。原创 2023-08-13 15:32:44 · 34 阅读 · 0 评论 -
l6-d1 进程的创建和回收
程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称进程是程序的一次执行过程动态的,包括创建、调度、执行和消亡程序位于硬盘ROM中,进程位于内存RAM中。BSS段:BSS段通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。数据段:数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域。代码段:代码段通常是指用来存放程序执行代码的一块内存区域。原创 2023-08-12 12:07:45 · 42 阅读 · 0 评论 -
l6-d11 无名管道和有名管道
1.进程间通信介绍无名管道(pipe)、有名管道 (fifo)、信号(signal)、共享内存(mmap)、套接字(socket)无名管道具有如下特点:1.只能用于具有亲缘关系的进程之间的通信(父子、兄弟进程)2.单工的通信模式,具有固定的读端和写端(单向通信)3.无名管道创建时会返回两个文件描述符,分别用于读写管道4.无名管道在内存文件中不可见。原创 2023-08-26 11:33:12 · 48 阅读 · 0 评论 -
l6-d8 线程的取消和互斥
1.线程通信 – 互斥临界资源一次只允许一个任务(进程、线程)访问的共享资源临界区访问临界资源的代码互斥机制mutex互斥锁任务访问临界资源前申请锁,访问完后释放锁。原创 2023-08-18 22:30:13 · 50 阅读 · 0 评论 -
l6-d7 线程的取消和清理
意义:随时杀掉一个线程注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用设置取消使能或禁止设置取消类型PTHREAD_CANCEL_DEFERRED 等到取消点才取消PTHREAD_CANCEL_ASYNCHRONOUS 目标线程会立即取消。原创 2023-08-16 18:36:20 · 59 阅读 · 0 评论 -
l6-d6 线程的回收及内存演示
1.线程回收对于一个默认属性的线程 A 来说,线程占用的资源并不会因为执行结束而得到释放成功返回0,失败时返回错误码thread 要回收的线程对象调用线程阻塞直到thread结束*retval 接收线程thread的返回值2、线程分离成功:0;失败:错误号指定该状态,线程主动与主控线程断开关系。线程结束后(不会产生僵尸线程)/*通过线程属性来设置游离态(分离态)*/也可以:设置线程属性为分离两种方式:1 使用pthread_detach2 创建线程时候设置为分离属性。原创 2023-08-15 23:54:59 · 57 阅读 · 0 评论 -
l6-d5 线程的创建和参数传递
一、线程的基本特点进程有独立的地址空间Linux为每个进程创建task_struct每个进程都参与内核调度,互不影响进程在切换时系统开销大很多操作系统引入了轻量级进程LWP同一进程中的线程共享相同地址空间Linux不区分进程、线程线程特点通常线程指的是共享相同地址空间的多个任务使用多线程的好处:大大提高了任务切换的效率、避免了额外的TLB & cache的刷新线程共享资源。原创 2023-08-14 23:55:54 · 49 阅读 · 0 评论