把所有的输出printf使用一个互斥的信号量同步一下就行了吧,C的标准库不是线程安全的。
虽然是2014年的问题,但是我现在也遇到了这个麻烦,回答留在这帮助一下以后遇到这个问题的人。同时显示不同的数我能想到一种方法,但是需要的是fpga的支持,这种方法需要在每个数码管前面放一个锁存器,用这个锁存器向这个数码管提供显示数据,当需要修改数码管显示的时候,更新锁存器内容就行了,这种方式也称为直流法(直接驱动);还有一种不同时显示但是可以给人一种同时显示的感觉,那就是先显示第一个,再显示第二个,再显示第三个,再显示第四个,只要时间间隔够短,在人们看来就是同时显示,这种方法不需要锁存器的支持,因为我们本来就是一次显示一个,这种方式称为动态扫描实现一个队列CQueue CQueue提供两个公有成员函数 addTail():往队列尾部增加一个元素 removeHead():读出并移除队列的第一个元素 生产者:两个线程通过调用CQueue::addTail()往队列中增加元素 消费者:一个线程通过调用CQueue::removeHead()从队列中读取元素 #include <iostream> #include <list> #include <windows.h> #include <process.h> using namespace std #define P(sem) WaitForSingleObject(sem,INFINITE) #define V(sem) ReleaseSemaphore(sem,1,NULL) class CQueue { public: void addTail()//往队列尾部增加一个元素 void removeHead()//读出并移除队列的第一个元素 private: list<int>L } CQueue buffer//全局的缓冲区 const int buf_size = 10//缓冲区大小 static int GOODS_ID = 0//商品序号 const int producers = 3//生产者数量 const int consumers = 8//消费者数量 void ProducerThread(void* param) void ConsumerThread(void* param) HANDLE empty,occupy,op_mutex int main() { int i int p_id[producers],c_id[consumers]欢迎分享,转载请注明来源:夏雨云
评论列表(0条)