1 Star 0 Fork 0

王宇轩/信息安全系统课程代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
buffer.txt 1.79 KB
一键复制 编辑 原始数据 按行查看 历史
wanghaha710 提交于 2023-09-17 15:15 . tianjia
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
// 假设有10个缓冲区
#define BUFFER_COUNT 10
// 缓冲区结构体
typedef struct {
int data;
// 其他缓冲区相关信息可以在这里添加
} Buffer;
Buffer buffers[BUFFER_COUNT]; // 缓冲区数组
sem_t free_sem; // 空闲缓冲区信号量
sem_t used_sem; // 已使用缓冲区信号量
// 获取缓冲区
Buffer* get_buffer() {
sem_wait(&free_sem); // 等待空闲缓冲区
for (int i = 0; i < BUFFER_COUNT; i++) {
if (buffers[i].data == -1) {
buffers[i].data = 0; // 假设初始化数据为0
sem_post(&used_sem); // 增加已使用缓冲区计数
printf("Thread %ld acquired buffer %d\n", pthread_self(), i); // 添加输出语句
return &buffers[i];
}
}
return NULL; // 没有可用缓冲区
}
// 释放缓冲区
void release_buffer(Buffer* buffer) {
if (buffer != NULL) {
buffer->data = -1; // 标记为空闲
sem_post(&free_sem); // 增加空闲缓冲区计数
printf("Thread %ld released buffer\n", pthread_self()); // 添加输出语句
}
}
int main() {
// 初始化信号量
sem_init(&free_sem, 0, BUFFER_COUNT);
sem_init(&used_sem, 0, 0);
// 初始化缓冲区
for (int i = 0; i < BUFFER_COUNT; i++) {
buffers[i].data = -1; // 表示空闲
}
// 模拟多个线程获取和释放缓冲区
pthread_t threads[5]; // 假设有5个线程
for (int i = 0; i < 5; i++) {
pthread_create(&threads[i], NULL, (void* (*)(void*))get_buffer, NULL);
}
// 等待线程完成
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
// 清理信号量
sem_destroy(&free_sem);
sem_destroy(&used_sem);
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/wang-yuxuan333/123.git
git@gitee.com:wang-yuxuan333/123.git
wang-yuxuan333
123
信息安全系统课程代码
master

搜索帮助