【问题标题】:How would YOU do/write this homework assignment? (theoretical)你会怎么做/写这个家庭作业? (理论)
【发布时间】:2009-03-19 15:31:28
【问题描述】:

我不是要求任何人为我做这个作业,但我提出它是因为它是对 C# 和线程的非常好的实用介绍,但同时我觉得它可能有点太简单了。

这真的是教授线程的最佳方法吗?在本练习中“丢失”了哪些关键线程概念,第一次使用线程的新程序员可能无法观察到什么?

我有很多关于线程的理论知识,但过去我自己不需要做很多,写它时有人对我有什么警告吗?

Here's the link to the original assignment

这是目标文本:

1) 创建线程安全的泛型 循环队列类并创建 GUI 使用它(见下一节)。在这个 上下文,线程安全意味着每个 操作(方法)改变 队列的内容应该是 一次只由一个线程执行 以避免数据损坏。一种 循环队列被实现为 固定大小的数组在哪里开始 和队列的结尾是索引 数组。随着队列填满, 队列的开始和结束将 随着元素转移到更高的值 添加并最终环绕到 数组中要重用的第一个索引 记忆。这门课也应该 抛出异常(在下面指定) 如果操作是给调用者 无效的。

2) 创建一个 GUI 来控制 生产者-消费者中的两个线程 时尚。 GUI 将能够开始 并启动和停止生产者 和消费者线程并控制 他们修改的速率 通用循环队列。

【问题讨论】:

  • 关闭不是一个真正的问题。请重新表述问题,使其具体、可回答且简单。这文字太多,问题太多,而且问题太笼统。
  • 我编辑以强调中间的部分,这是问题的核心所在。
  • 这是一个真实的问题,或者更确切地说是一系列引发讨论的问题。
  • SO 本身并不真正鼓励“讨论”。您可以随心所欲地争论该选择的优点(最好通过stackoverflow.uservoice.com),但目前就是这样。
  • 可以理解,我可能会努力改变这一点。这仍然是一个问题。

标签: multithreading theory circular-buffer


【解决方案1】:

【讨论】:

  • 很好的相关阅读,我真的在这里为理论讨论拍摄更多内容,但我感谢您的回应!
  • 感谢您将文本加粗,它确实更好地传达了我的主要观点。
【解决方案2】:

阅读有关 SyncLock 或 Monitor(假设为 Windows C#)的信息。

这是理解多线程的最佳方式,尤其是在多核时代。

【讨论】:

    【解决方案3】:

    我想说这遗漏了两件大事:

    • 大量写入、读取无法获得锁定和饥饿;结果:像这样的有界队列被填满。您需要一种方法来赋予读者更高的优先级,以便他们可以排空队列。
    • 可扩展性——您可以很容易地使其成为线程安全的,只需要一个锁来读取或写入,这对于一个读者/一个作者来说非常有用。但是,一旦拥有大量生产者/消费者,就会出现大量线程争用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      相关资源
      最近更新 更多