1
1
您应该从一个通用的生产者-消费者队列开始并使用它。在队列中实现这一点并不是一个好主意,因为这会阻止您使用信号量来向线程发送信号(或者,您的队列中可能有公共信号量,但这是 坏主意)。 一旦线程A将单个工作项排队,它就必须发出信号通知线程B。当线程B处理完所有项时,它应该发出信号通知其他所有人它已经完成。您的主线程应该在等待第二个信号量知道所有事情都完成了。 [编辑]
所以,在您的情况下,创建邮件的类需要启动
然后将这两个实例传递给
要使用它,需要让类实现这两个接口:
最棒的是:
|
2
2
如果有.Net 4.0,请使用
如果你有一个早期的.Net,那么升级(即,我懒得解释如何实现已经为你做过的事情) 编辑: |
3
1
我写了一个简单的例子,对我来说很好,应该适合你的场景。如果用户正在运行取决于运行变量是如何设置的,但是您可以轻松地将其修改为更复杂的条件,比如“如果没有邮件存在,但有人说我应该等待更多”。
|
4
1
你想要的可以用条件变量来完成。我将编写一个伪代码示例,应该不会太难实现。 一根线有如下线索:
而另一条线有这样的线索
所以如果你没有收到任何信息,就推一条死亡信息。当所有的信息都被处理过的时候。
调用notifyOne()时wait()返回,然后队列有消息要发送。在大多数框架中,conditionvariable已经拥有锁,您可能需要在.NET中自己添加lock语句。 |
5
0
我会用一个线程来完成整个过程。即生成邮件正文并发送。只是因为生成邮件正文不需要时间,但是发送电子邮件需要时间。
因此,可以在每个线程执行其任务的地方启动多个线程(在数量上保持上限)。如果您使用sat处理作业(数据)的集合,那么您可以并行化数据(即将数据分割成与系统上的核心数匹配的块,例如作业的快照(线程)。 使用任务将使所有这一切变得更加简单,无论你走哪条路,即2个线程发送一封电子邮件或一个线程完成整个工作,但使用多个线程并行完成多个工作。 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
rhymes · 如何让线程操作相同的java列表 2 年前 |