首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否限制正在运行的线程数?

是否限制正在运行的线程数?
EN

Stack Overflow用户
提问于 2012-10-24 18:44:57
回答 4查看 2.9K关注 0票数 0

我继承了下面的一些代码,运行得很好,唯一的问题是,我希望能够限制在任何时候运行的线程的数量,目前我有大约8-10个并行运行的作业,我想在任何时候将线程的数量限制在3到4个,这可以在不做太多更改的情况下使用下面的代码吗?

代码语言:javascript
复制
Public Sub threading_Example()

 Dim threadList As New List(Of Thread)

 For n = 0 To numJobs 'about 8-10 normally

     Dim new_job As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf do_Job))
     Dim job As New Job

     'job.stuff = stuff

     newJob.Start(job)
     threadList.Add(new_job)

 Next

 For Each t As Thread In threadList
     t.Join()
 Next

End Sub

Public Sub do_Job(ByVal job As Object)
   'do task 
End Sub
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-24 20:25:55

尝试使用Semaphore,例如:

代码语言:javascript
复制
ReadOnly Sem As New Semaphore(3, 4)

    Sub Main()

        Dim threadList As New List(Of Thread)
        Dim numJobs As Integer
        For n = 0 To numJobs

            Dim new_job As New System.Threading.Thread(New System.Threading.ParameterizedThreadStart(AddressOf do_Job))

            new_job.Start()
            threadList.Add(new_job)

        Next

        For Each t As Thread In threadList
            t.Join()
        Next


    End Sub


    Public Sub do_Job(ByVal job As Object)

        Sem.WaitOne()
        'only 3 or 4 threads at time can do task
        Sem.Release()
    End Sub
票数 0
EN

Stack Overflow用户

发布于 2012-10-24 19:54:29

我的建议是使用线程池。线程池中内置了许多优化功能。例如,线程池可以确定机器拥有的核心数量,并相应地调度线程数量。如果创建了更多的线程,但没有正确利用,线程池将杀死更多的线程。

考虑使用线程池重构代码。线程池还具有限制线程数量的选项(但不建议这样做)。

票数 0
EN

Stack Overflow用户

发布于 2012-10-24 19:55:22

我建议使用ThreadPool。您可以通过SetMin|MaxThread方法限制它使用的线程数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13047614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档