资源简介
以生产者/消费者问题为例来阐述Linux线程的控制和通信。一组生产者线程与一组消费者线程通过缓冲区发生联系。生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。缓冲区有N 个,是一个环形的缓冲池。 使用命令cc consumer.c -o consumer编译
代码片段和文件信息
/*
* consumer.c
*
* Created on: 2019年3月13日
* Author: WanQing
*/
#include
#include
#include
#define BUFFER_SIZE 16 // 缓冲区数量
struct prodcons {
// 缓冲区相关数据结构
int buffer[BUFFER_SIZE]; /* 实际数据存放的数组*/
pthread_mutex_t lock; /* 互斥体lock 用于对缓冲区的互斥操作 */
int readpos writepos; /* 读写指针*/
pthread_cond_t notempty; /* 缓冲区非空的条件变量 */
pthread_cond_t notfull; /* 缓冲区未满的条件变量 */
};
/* 初始化缓冲区结构 */
void init(struct prodcons *b) {
pthread_mutex_init(&b->lock NULL);
pthread_cond_init(&b->notempty NULL);
pthread_cond_init(&b->notfull NULL);
b->readpos = 0;
b->writepos = 0;
}
/* 将产品放入缓冲区这里是存入一个整数*/
void put(struct prodcons *b int data) {
pthread_mutex_lock(&b->lock);
/* 等待缓冲区未满*/
if ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {
pthread_cond_wait(&b->notfull &b->lock);
} /*else if (b->writepos == b->readpos) {
}*/
pthread_cond_signal(&b->notempty);
/* 写数据并移动指针 */
b->buffer[b->writepos] = data;
b->writepos++;
if (b->writepos >= BUFFER_SIZE)
b->writepos = 0;
/* 设置缓冲区非空的条件变量*/
pthread_mutex_unlock(&b->lock);
}
/* 从缓冲区中取出整数*/
int get(struct prodcons *
- 上一篇:航班信息管理系统C语言编写
- 下一篇:c语言实现矩阵求逆程序
相关资源
- Linux下硬盘分区读写程序
- MFC创建用户界面线程方法2
- linux ext2 文件系统模拟 c语言实现
- 操作系统文件管理系统c++
- 操作系统课程设计 linux文件系统
- linux环境下的QQ聊天系统
- linux局域网聊天软件server+client 源码
- TCP一对多通信_基于MFC多线程
- linuxc语言信号量爸爸女儿儿子橘子苹
- 生产者消费者算法图形化演示系统
- linux ftp服务器
- 多进程写文件仿真
- c语言实现linux shell下的cat命令
- 基于Linux系统的聊天程序
- 基于linux系统socket网络五子棋对战
- 网络编程聊天室--操作演示文档
- linux下最小RTSP服务器实现
- Linux虚拟文件系统vfs的模拟代码
- linux终端c编程练习 大富翁游戏
- 嵌入式C语言技术实战开发一书源代码
- Linux- 用C语言实现的简单Web服务器源代
- 多线程流式套接字C/S模式通信程序
- Linux环境下的文件安全传输(C/C++)
- C和C++ Windows代码移植到Linux
- p2p通信的简单实现c语言
- Linux软件工程师(C语言)实用教程_
- linpop 聊天软件
- linux环境C语言tcp聊天室
- c语言多线程计算PI
- 基于Linux消息队列的简易聊天室(C语
评论
共有 条评论