当前位置: 首页 > news >正文

马鞍山专业网站制作公司东莞大岭山森林公园

马鞍山专业网站制作公司,东莞大岭山森林公园,体育建设网站,网站建设小程序湖南请使用条件变量实现2生产者2消费者模型&#xff0c;注意1个生产者在生产的时候&#xff0c;另外一个生产者不能生产。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h>…

请使用条件变量实现2生产者2消费者模型,注意1个生产者在生产的时候,另外一个生产者不能生产。

1>程序代码
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;#define BUFFER_SIZE 5
#define PRODUCER_COUNT 2
#define CONSUMER_COUNT 2// 缓冲区
int buffer[BUFFER_SIZE];
// 缓冲区索引
int in = 0;
int out = 0;
// 缓冲区中的元素数量
int count = 0;// 互斥锁和条件变量
pthread_mutex_t mutex;
pthread_cond_t not_full;
pthread_cond_t not_empty;// 生产者互斥锁
pthread_mutex_t producer_mutex;// 生产者线程函数
void *producer(void *arg) {int id = *(int *)arg;while (1) {// 加锁,确保同一时间只有一个生产者可以生产pthread_mutex_lock(&producer_mutex);// 加锁,保护共享资源pthread_mutex_lock(&mutex);// 等待缓冲区有空闲位置while (count == BUFFER_SIZE) {pthread_cond_wait(&not_full, &mutex);}// 生产一个数据buffer[in] = rand() % 100;printf("Producer %d produced %d at position %d\n", id, buffer[in], in);in = (in + 1) % BUFFER_SIZE;count++;// 通知消费者缓冲区有数据了pthread_cond_signal(&not_empty);// 解锁pthread_mutex_unlock(&mutex);// 解锁生产者互斥锁pthread_mutex_unlock(&producer_mutex);// 模拟生产时间sleep(1);}return NULL;
}// 消费者线程函数
void *consumer(void *arg) {int id = *(int *)arg;while (1) {// 加锁,保护共享资源pthread_mutex_lock(&mutex);// 等待缓冲区有数据while (count == 0) {pthread_cond_wait(&not_empty, &mutex);}// 消费一个数据int item = buffer[out];printf("Consumer %d consumed %d from position %d\n", id, item, out);out = (out + 1) % BUFFER_SIZE;count--;// 通知生产者缓冲区有空闲位置了pthread_cond_signal(&not_full);// 解锁pthread_mutex_unlock(&mutex);// 模拟消费时间sleep(1);}return NULL;
}int main(int argc, const char *argv[])
{// 初始化互斥锁和条件变量pthread_mutex_init(&mutex, NULL);pthread_cond_init(&not_full, NULL);pthread_cond_init(&not_empty, NULL);pthread_mutex_init(&producer_mutex, NULL);// 创建生产者和消费者线程pthread_t producers[PRODUCER_COUNT];pthread_t consumers[CONSUMER_COUNT];int producer_ids[PRODUCER_COUNT];int consumer_ids[CONSUMER_COUNT];for (int i = 0; i < PRODUCER_COUNT; i++) {producer_ids[i] = i;pthread_create(&producers[i], NULL, producer, &producer_ids[i]);}for (int i = 0; i < CONSUMER_COUNT; i++) {consumer_ids[i] = i;pthread_create(&consumers[i], NULL, consumer, &consumer_ids[i]);}// 等待线程结束for (int i = 0; i < PRODUCER_COUNT; i++) {pthread_join(producers[i], NULL);}for (int i = 0; i < CONSUMER_COUNT; i++) {pthread_join(consumers[i], NULL);}// 销毁互斥锁和条件变量pthread_mutex_destroy(&mutex);pthread_cond_destroy(&not_full);pthread_cond_destroy(&not_empty);pthread_mutex_destroy(&producer_mutex);return 0;
}
2>运行效果
http://www.yayakq.cn/news/968360/

相关文章:

  • 制定企业网站营销推广战略河津网站建设网站建设
  • 海南建设银行官网招聘网站中国企业排名前十
  • 接做网站需要问什么软件搭建网页游戏教程
  • 传媒网站建设方案个性化网站建设定制
  • 图片设计网站推荐做网站增加流量
  • linux做网站哪个版本好沧州网站建设 网络服务
  • wordpress开启多站点模式网站建设维护与推广
  • 成都微信网站建设公司郴州吧百度贴吧
  • wordpress验证码代码优化步骤
  • 网站首页建设兰州企业 网站建设
  • 网站建设 业务员以绿色为主色的网站模版
  • 肥城网站建设广州外地车牌小程序后端搭建
  • 虚拟机上做钓鱼网站淘宝的网络营销模式
  • 华为做网站吗wordpress主题汉化包怎么用
  • 电商网站如何做精细化运营网站建设的公司都有哪些
  • 个人网站建设教程wordpress ftp验证
  • wordpress仿站工具wix怎样做网站
  • 网站主机地址求南浦做电商网站
  • 齐齐哈尔网站建设公司工装装饰公司
  • 网页模板建站系统高明网站建设
  • 企业网站功能介绍淮滨网站建设
  • 神木网站建设做百度还是阿里网站好
  • 用自己电脑做网站的空间化工网站模板
  • 怎么优化网站程序网站域名空间代理
  • 教育教学网站建设设计作品展示网站
  • 企业网站建设推荐兴田德润网络营销方案怎么写
  • 公司网站如何做的美丽做网站的原型 免费
  • 怎样学做网站手机 写wordpress
  • 如何做可以微信转发的网站wordpress无评论
  • 龙岗在线网站建设帝国建站程序