gpt4 book ai didi

c - 生产者消费者同步的伪代码

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:33 28 4
gpt4 key购买 nike

我在为我的操作系统类(class)的家庭作业编写伪代码时遇到了一些麻烦,我们在该类(class)中使用 C 语言进行编程。

You will be implementing a Producer-Consumer program with a bounded buffer queue of N elements, P producer threads and C consumer threads (N, P and C should be command line arguments to your program, along with three additional parameters, X, Ptime and Ctime, that are described below). Each
Producer thread should Enqueue X different numbers onto the queue (spin-waiting for Ptime*100,000 cycles in between each call to Enqueue). Each Consumer thread
should Dequeue P*X/C items from the queue (spin-waiting for Ctime*100,000 cycles in between each call to Dequeue).
The main program should create/initialize the Bounded Buffer Queue, print a timestamp, spawn off C consumer threads & P
producer threads, wait for all of the threads to finish and then print off another timestamp & the duration of execution.

我的主要困难是理解我的教授所说的自旋等待变量乘以 100,000 的意思。我将令我困惑的部分加粗了。

我知道时间戳将用于打印每个线程之间的差异。目前我们正在使用信号量并实现同步。对上述查询的任何建议将不胜感激。

最佳答案

我猜这意味着忙等待;反复检查循环条件并在紧密循环中消耗不必要的 CPU 能力:

while (current_time() <= wake_up_time);

理想情况下,人们会使用一些东西来挂起你的线程,直到它被调度程序从外部唤醒(这样 CPU 等资源就可以转移到其他地方):

sleep(2 * 60 * 1000 ms);

或者至少放弃一些 CPU(即不要那么紧张):

while (current_time() <= wake_up_time)
sleep(100 ms);

但我猜他们不希望您手动调用调度程序,暗示操作系统(或您的线程库)现在是进行上下文切换的好时机。

我不确定什么是周期;在汇编中它们可能是 CPU 周期,但鉴于您的问题被标记为 C,我敢打赌它们只是循环迭代:

for (int i=0; i<Ptime*100000; ++i); //spin-wait for Ptime*100,000 cycles

尽管问作业的人总是最安全的。

关于c - 生产者消费者同步的伪代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com