关于网友提出的“ 多线程同步:刚开始接触线程,无从下手,如何编程实现急求!!!!!!!!!!”问题疑问,本网通过在网上对“ 多线程同步:刚开始接触线程,无从下手,如何编程实现急求!!!!!!!!!!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 多线程同步:刚开始接触线程,无从下手,如何编程实现急求!!!!!!!!!!描述:
有两个线程,生产线程负责产生随机自然数(>0),每次产生一个,产生好后放入一个数组构成的缓冲区。消费线程负责取出来,显示在屏幕上。缓冲区的number字段为0时表示为该缓冲区为空闲;否则为忙状态。
当缓冲区都处于忙状态时,生产线程要等待缓冲区中有空闲缓冲区,即等待消费线程进行消费;当缓冲区都处于空闲状态时,消费线程要等待生产线程生产。
实现者必须体会这句话的含义,即条件变量。
缓冲区的记录定义如下:
struct node_st {
int number;
struct node_st *next;
};
typedef struct node_st node_st;
node_st pool[10]; /* 缓冲区个数为10个 */
要求:
1) 消费线程每取走一个自然数,则将该缓冲区置成0, 即将 node_st 的 number 字段置成0
2) 生成线程检验缓冲区是否为空的依据是判断node_st 的 number 字段是否为0
3) 不容许生产线程和消费线程同时访问缓冲区
4) 使用 mutex, semaphore 等 线程同步对象,通信对象
5) 不能使用 Sleep 等函数来同步线程,但可以使用Sleep来调节生产或消费的速度。
6) 使用VC的 console 工程,将生产线程产生的自然数和消费线程消费的自然数输出在屏幕上。