自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 简单的生产者消费者模型

本文探讨了多线程环境下通过共享缓冲区实现生产者-消费者模型的两种同步方案。第一种采用条件变量机制,生产者通过头插法向链表中插入数据节点后唤醒消费者,消费者在缓冲区为空时进入等待状态。第二种使用信号量方案,通过pro_s(初始为5)和cus_s(初始为0)两个信号量分别控制缓冲区的空位和资源数量,实现生产消费的同步。两种方案都配合互斥锁保证链表操作的线程安全,其中条件变量方案适用于资源状态变化的场景,而信号量方案更侧重资源数量的控制。文中给出了完整的C语言实现代码,包括链表节点定义、线程创建和同步原语的初始化

2025-06-06 17:29:44 247

原创 使用互斥量实现简单线程同步

摘要:该C程序实现多窗口同步售票功能,使用3个线程模拟3个售票窗口同时售卖1000张票。通过pthread_mutex_t互斥锁确保线程安全,防止并发访问导致的数据竞争。每个线程在售票时先获取锁,检查剩余票数并执行售票操作,然后释放锁。程序采用线程分离模式,主线程退出后子线程继续运行,最后销毁互斥锁资源。代码展示了多线程同步机制在售票场景中的应用。

2025-06-05 16:35:42 100

原创 linux线程创建

摘要:本文介绍了线程的基础概念,区分主线程和子线程,并解析了pthread_create()函数的主要参数。通过示例代码演示了如何创建子线程,传递参数并使用回调函数。程序默认单线程,调用pthread_create()后会产生新线程,主线程需适当延时确保子线程执行。函数参数包括线程ID、属性、回调函数指针和传入参数。案例展示了线程创建的基本流程和参数传递方法。

2025-06-04 18:11:57 172

原创 守护进程概述

摘要:守护进程是Linux后台运行的长生命周期服务进程,独立于控制终端且周期性执行任务。其创建步骤包括:1)父进程fork后退出;2)子进程setsid创建新会话;3)设置掩码、工作目录等可选操作。案例实现了一个每隔3秒记录系统时间到文件的守护进程,通过信号捕捉定时触发写操作。该进程遵循典型守护进程创建流程,包含核心业务逻辑与定时器设置,展现了Linux服务器守护进程的基本实现模式。

2025-06-03 21:38:35 356

原创 使用sigchld信号回收子进程

本文介绍了一个父子进程信号处理的C语言实现。程序通过设置阻塞信号集防止子进程过早结束,创建20个子进程后,父进程注册SIGCHLD信号处理函数来异步回收子进程。关键点包括: 使用sigprocmask阻塞SIGCHLD信号 fork创建20个子进程 父进程设置sigaction处理SIGCHLD信号 处理函数中使用waitpid非阻塞回收子进程 子进程简单打印信息后退出 该方案有效解决了父子进程同步和异步回收问题,避免了僵尸进程的产生。

2025-06-02 16:49:52 193

原创 信号机制简介

摘要:信号是进程间通信的一种简单机制,用于通知进程特定事件发生或强制其执行处理程序。信号具有简单、信息量小、条件触发和高优先级的特点。通过kill -l可查看系统信号,其中前31个为常规信号。信号有五种默认处理方式:终止进程、忽略、生成核心文件、暂停或继续进程。值得注意的是,SIGKILL和SIGSTOP信号不能被捕获、阻塞或忽略。

2025-05-29 19:42:08 218

原创 内存映射实现文件复制功能

本文介绍了使用内存映射实现文件复制的C语言方法。主要步骤包括:打开源文件和目标文件,使用truncate扩展目标文件大小,通过mmap创建内存映射区域,用memcpy进行内存数据拷贝,最后释放资源并关闭文件。代码示例演示了完整实现流程,包含必要的头文件引用和错误处理。该方法利用内存映射技术高效完成文件复制,避免了传统逐字节读取写入的性能开销,适用于大文件操作场景。

2025-05-27 22:13:26 180

原创 内存映射实现父子间进程通信

内存映射(Memory-mapped I/O)通过将磁盘文件映射到内存实现进程间通信。父子进程可通过共享内存映射区通信;无关联进程则需借助磁盘文件创建映射区。代码示例展示了父子进程利用内存映射区传递信息的过程,其中父进程写入字符串,子进程读取。使用时需注意映射文件不能为空,通信过程是非阻塞的。该方法高效直接,适用于各类进程间数据共享场景。

2025-05-26 22:02:52 222

原创 有名管道实现简单聊天功能(进程间通信)

本文介绍了一种使用有名管道实现简单聊天功能的C语言程序。通过创建两个进程和两个管道(pipe1和pipe2),分别实现进程间的双向通信。进程1以只写方式打开pipe1和只读方式打开pipe2,而进程2则相反。程序包含检查管道存在性、创建管道、读写操作等步骤,并展示了实际运行效果。该方案在Ubuntu64环境下实现了基本的聊天功能,但尚不支持连续发送消息。两个进程代码结构相似,主要区别在于管道的读写方向设置。

2025-05-26 19:44:04 314

原创 管道读写特点

管道读写特点

2025-05-26 15:42:54 105

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除