![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LV6 并发程序设计
文章平均质量分 72
枯木遇南风丨
鲜衣怒马少年时,不负韶华行且知
展开
-
day16 信号灯
信号量代表某一类资源,其值表示系统中该资源的数量;信号量是一个受保护的变量,只能通过三种操作来访问初始化、P操作(申请资源)、V操作(释放资源)(P消费者、V生产者)是不同进程间或一个给定进程内部不同线程间同步的机制。Posix 有名信号灯;Posix 无名信号灯;System V 信号灯;name:name是给信号灯起的名字;oflag:打开方式,常用O_CREATmode :文件权限,常用06666value:信号量值。二元信号量值为1,普通表示资源数目;原创 2023-04-19 23:17:51 · 358 阅读 · 0 评论 -
day15 消息队列
MSG_EXCEPT:与msgtype配合使用返回队列中第一个类型不为msgtype的消息。IPC_NOWAIT:如果没有返回条件的消息调用立即返回,此时错误码为ENOMSG。0:当消息队列满时,msgsnd会阻塞,知道消息能写进消息队列。cmd : 要执行的操作 IPC_STAT / IPC_SET / IPC_RMID(删除)msgtype>0:收到的第一条 msg_type类型的消息。用户可以在消息队列中添加消息、读取消息等;1、消息结构必须有long类型的msg_type字段,表示消息的类型;原创 2023-04-18 21:55:55 · 487 阅读 · 0 评论 -
day14 信号机制(下)
有时候不希望在接收到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。1、如果信号的默认处理动作是终止进程,则进程终止,pause函数么有机会返回。信号递达(Delivery):实际信号执行的处理过程(3种状态:忽略、执行默认动作、捕获)功能:将进程的屏蔽字替换为由参数sigmask给出的信号集,然后挂起进程的执行。信号的“阻塞”是一个开关动作,值得是阻止信号被处理,但不能阻止信号产生。首先,若oset是非空指针,那么进程的当前信号屏蔽字通过oset返回。原创 2023-04-18 16:49:09 · 327 阅读 · 0 评论 -
day13 信号机制 (上)
sa_handler: 是一个函数指针,其含义与 signal 函数中的信号处理函数类似sa_sigaction: 另一个信号处理函数,它有三个参数,可以获得关于信号的更详细的信息。sa_flags参考值如下:SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数SA_RESTART:使被信号打断的系统调用自动重新发起。SA_RESETHAND:信号处理之后重新设置为默认的处理方式。原创 2023-04-18 00:53:02 · 149 阅读 · 0 评论 -
day12 共享内存(内存映射的使用、注意事项、进程间通信、systemV共享内存)
功能共享内存可以通过mmap()映射普通文件。是一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必在调用read 、write。实现了用户空间和内核空间的高效交互方式;功能:创建共享内存映射;函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED(((void*) -1)),设置error值;addr:指定要映射 的内存地址,一般设置为NULL 让操作系统选择合适的内存地址。length:必须 > 0。原创 2023-04-17 20:13:29 · 387 阅读 · 0 评论 -
day11 有名管道和无名管道
只能用于具有亲缘关系的进程之间的通信;单工的通信模式,具有固定的读端和写端;无名管道创建时会返回两个文件描述符,分别用于读写管道;原创 2023-04-15 23:58:37 · 192 阅读 · 0 评论 -
day10 线程池及gdb调试多线程
当T1 + T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的的凯西欧啊,任务处理时间比较短的时候这个好处非常显著。我们平时创建一个线程,完成某一个任务,等待线程的退出。假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间;2、线程池工作线程,他是任务队列任务的消费者,等待新任务的信号;通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合;1、任务队列,存储需要处理的任务,由工作线程来处理这些任务;on:其他线程会暂停,可以单独调试一个线程。原创 2023-04-13 20:47:41 · 213 阅读 · 0 评论 -
day9 条件变量的基本使用
lock,所以pthread_cond_wait 和 pthread_mutex_lock。信号会被多个线程收到,这叫线程的惊群效应。所以需要加上判断条件。必要性:为了实现等待某个资源,让线程休眠,提高运行效率;应用场景:生产者消费问题,是线程同步的一种手段;如果pthread_cond_signal。2、广播通知多个消费线程。,在没有资源等待时是先。,则有可能会丢失信号。1、通知一个消费线程。原创 2023-04-12 16:57:39 · 371 阅读 · 0 评论 -
day8 互斥锁/读写锁的概念及使用、死锁的避免
在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的 pthread_mutex_destroy()对于写者:写者使用写锁,如果当前 没有读者,也没有其他写者,写者立即获得写锁;读写锁处于写锁状态时,所有试图对读写锁加锁的线程,不管是读者试图加读锁,还是写者试图加写锁,都会被阻塞;读写锁处于读锁状态时,有写者试图加写锁时,之后的其他线程的读锁请求会被阻塞,以避免写者长时间的不写锁;mutex互斥锁,任务访问临界资源钱申请锁,访问完后释放锁。成功时返回 0, 失败时返回错误码;原创 2023-04-11 23:26:45 · 424 阅读 · 0 评论 -
day7 线程的取消和清理
意义:随时杀掉一个线程线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用可以使用gdb调试;1、使用gdb编译代码;2、使用gdb运行程序;gdb ./xxx3、运行之后使run命令;(gdb)run等待出现4、输入命令bt(打印调用栈)(gdb) btxxx.c:21确定段错误位置是xxx.c21行。原创 2023-04-11 12:19:06 · 442 阅读 · 0 评论 -
day6 线程的回收及内存演示
对于一个默认属性的线程A来说,线程占用的资源并不会因为执行结束而得到释放;成功返回0,失败时返回错误码;thread :要回收的线程对象;调用线程阻塞直到thread结束;*ratval :接收线程thread 的返回值;pthread_join 是阻塞函数,如果回收的线程没有结束,则一直等待。原创 2023-04-10 21:22:43 · 401 阅读 · 0 评论 -
day5 线程的创建和参数传递
1、进程有独立的地址空间;2、Linux为每个进程创建task_struct;3、每个进程都参与内核的调度,互不影响;原创 2023-04-10 17:40:53 · 395 阅读 · 0 评论 -
day 4GDB 调试多进程程序
父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。只调试父进程或子进程的其中一个,(根据follow-fork-mode来决定),这是默认的模式。进程序号(1,2,3....) 切换GDB调试的进程。设置GDB跟踪调试单个进程或多个。设置GDB调试子进程。设置GDB调试父进程。显示GDB调试的进程。原创 2023-04-09 20:13:53 · 49 阅读 · 0 评论 -
day3 守护进程
守护进程(Deamon Process)是Linux三种进程(前台进程、批处理进程、守护进程)类型之一:是Linux中的后台服务进程,是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。始终在后台运行,独立于任何终端,周期性的执行某种任务或等待处理特定事件。它是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。原创 2023-04-09 00:30:59 · 49 阅读 · 0 评论 -
day 2exec函数族
进程调用exec函数族执行某个程序;进程当前内容被指定的程序替换;实现让父子进程执行不同的程序;父进程创建子进程;子进程调用exec函数族;父进程不受影响。原创 2023-04-08 18:05:33 · 39 阅读 · 0 评论 -
day 1进程的创建和回收
存放在磁盘上的指令和数据的有序集合(文件静态的。执行一个程序所分配的资源的总称,进程是程序的一次执行过程,动态的,包括创建、调度、执行和消亡。存放程序中未初始化的全局变量;存放程序中已初始化的全局变量;程序执行代码;堆适用于存放进程运行中被动态分配的内存段(malloc等函数分配内存),当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张), 当利用free等函数释放内存时,被适当的内存从堆中被剔除(堆被缩减。原创 2023-04-08 13:55:22 · 59 阅读 · 0 评论