基于c的水果店进程问题代码
时间: 2024-09-25 15:04:01 浏览: 1
在基于C语言的并发控制场景中,我们可以使用进程(processes)模拟一个简单的水果店环境。这里是一个简化的例子,通常会涉及到多线程或多进程来表示顾客和服务员的工作流程。下面是一个基本的代码片段:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
typedef struct {
char name[50];
int quantity;
} Fruit;
#define NUM_Fruits 5
Fruit fruits[NUM_Fruits]; // 水果库存
void* customer_thread(void *arg) {
while (1) {
printf("Customer %s is checking for fruit.\n", (char*) arg);
// 顾客随机选择一个水果并询问库存
int random_fruit = rand() % NUM_Fruits;
if (fruits[random_fruit].quantity > 0) {
printf("Customer %s found %s, %d left in stock.\n", (char*) arg, fruits[random_fruit].name, fruits[random_fruit].quantity);
} else {
printf("Customer %s couldn't find %s.\n", (char*) arg, fruits[random_fruit].name);
}
sleep(2); // 模拟顾客浏览时间
}
}
void* server_thread(void *arg) {
while (1) {
printf("Server %s is managing the store.\n", (char*) arg);
// 服务员处理请求,例如增加库存或卖出水果
pthread_t customer_pid; // 临时保存客户线程ID
scanf("Enter a request (buy|add): ");
if (strcmp("buy", input) == 0) { // 假设输入合法
// 搜索正在购物的客户
for (int i = 0; i < NUM_Fruits; i++) {
if (fruits[i].in_cart) {
customer_pid = fruits[i].customer_pid;
break;
}
}
if (customer_pid != PTHREAD_NULL) {
pthread_join(customer_pid, NULL);
// 如果顾客还在购物,结束当前订单
fruits[random_fruit].in_cart = 0;
fruits[random_fruit].quantity -= 1;
printf("Sold %s to customer %s, %d left in stock.\n", fruits[random_fruit].name, (char*) arg, fruits[random_fruit].quantity);
}
} else if (strcmp("add", input) == 0) {
int new_quantity;
scanf("Enter new quantity for %s: ", &new_quantity);
// 添加新水果或调整现有水果的数量
for (int i = 0; i < NUM_Fruits; i++) {
if (strcmp(fruits[i].name, input) == 0) {
fruits[i].quantity += new_quantity;
break;
}
}
printf("Increased %s stock to %d.\n", input, fruits[i].quantity);
}
sleep(1); // 模拟服务器操作时间
}
}
int main() {
srand(time(NULL)); // 初始化随机数生成器
pthread_t customer_thread_id, server_thread_id;
// 创建客户和服务器线程
pthread_create(&customer_thread_id, NULL, customer_thread, "Customer");
pthread_create(&server_thread_id, NULL, server_thread, "Server");
// 等待所有线程完成
pthread_join(customer_thread_id, NULL);
pthread_join(server_thread_id, NULL);
printf("Store closed.\n");
return 0;
}
```
这个代码示例展示了两个线程:一个是模拟顾客(购买并查看水果),另一个是模拟服务员(管理库存)。请注意,这只是一个简化版的模型,并未包含真正的并发控制机制,比如互斥锁、条件变量等。