#define _CRT_SECURE_NO_WARNINGS /* VS2013,2015需要这一行 */ #include <stdio.h> #include <time.h> #include <stdlib.h> #include "osapi/osapi.h" OS_Mutex g_mutex; int g_buf[100]; // 缓冲区:最多存放100个数 int g_count = 0; // 第一个线程:生产者 class Producer : public OS_Thread { public: int Routine() { while(1) { int r = rand() % 20 + 1; // 生成一个1..20之间的随机数 OS_Thread::Msleep(50 * r); // 睡觉的间隔50-1000毫秒 // 存放一个物品(这里就是存一个数, 代表一下物品的意思) g_mutex.Lock(); g_buf[g_count] = r; g_count ++; printf("放入物品: %d \n", r); g_mutex.Unlock(); } return 0; } }; // 第二个线程:消费者 class Consumer : public OS_Thread { public: int Routine() { // 轮询机制:频繁查询当前物品的个数 while(1) { OS_Thread::Msleep(800); g_mutex.Lock(); if(g_count > 0) { for(int i=0; i<g_count; i++) { printf(" ==== 消费物品: %d \n", g_buf[i]); } g_count = 0; } g_mutex.Unlock(); } return 0; } }; int main() { srand(time(NULL)); // 启动第一个线程 Producer p; p.Run(); // 启动第二个线程 Consumer c; c.Run(); // 按回车退出程序 getchar(); return 0; }