锁定线程取决于其他线程的当前编程计数器

夏玛尔·帕里克(Shyamal Parikh)

这是我正在处理的通用代码。问题是如何在所有子线程都已执行且main_thread处于睡眠状态之前停止2nd_thread。同样,main_thread也将等待返回,以执行while循环执行。如果main_thread当前正在执行,它将等到2nd_thread执行完毕。

我想到了使用可以由线程修改的全局变量来通知2nd_thread是否应该开始执行。但是,可能导致多个线程同时访问全局变量。

我什至想到了用静态对象锁定sub_threads,main_thread和2nd_thread,但是如果我锁定sub_threads,那么就不再有sub_threads的多线程了。

怎么解决呢?

void main()  
{    
    //Do something here  

    Thread thread1 = new thread(main_thread);  
    thread1.start();  

    //Do something here  

    if(something) //Button event  
    {
         Thread thread2 = new Thread(2nd_thread)  
         thread2.start();
    } 
}  

void main_thread()
{
    while(true)
    {  
        //Do something  
        if(after something, if condition true)
        {
            new Thread(sub_thread).start();  
        }
        //Do something
        Thread.sleep(_sometime_);
    }  

}  

void 2nd_thread()  
{
    //This thread must execute only if main_thread is sleeping   
    //and all sub_threads have been executed. Till then wait for  
    //other threads to execute.  
}

void sub_thread()  
{  
     //Do something
}
生命力

无需尝试其他线程框架,您就可以使用CountDownEvent实现您想要的功能(问题中实际上遗漏了许多细节,但这可以为您提供一个良好的开端)。

声明一个共享的CountDownEvent。假设main_thread产生的工作线程数预先为knwon,则可以使用该数目初始化事件。工作人员中的最后一行代码将减少Signal()计数器。

2nd_thread的第一行代码将Wait()在该事件上。因此,只有当其内部计数达到零(即所有工作线程都已完成)时,它才会恢复执行。

如果您不提前知道工作人员的数量,则每个新工作人员都可以动态地增加计数器,但是您将需要处理各种竞争条件(例如第一个线程有机会增加第一个工作线程之前,第二个线程开始工作)。柜台..)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

锁定线程取决于其他线程的当前编程计数器

来自分类Dev

原子线程计数器

来自分类Dev

SQL自动计数器取决于列值

来自分类Dev

Java线程计数器“问题”?

来自分类Dev

解析计数器是多线程的吗?

来自分类Dev

线程安全访问计数器

来自分类Dev

使用 OpenMP 的线程安全计数器

来自分类Dev

从其他线程锁定类成员

来自分类Dev

Java多线程-线程安全计数器

来自分类Dev

Python itertools计数器的当前值是多少

来自分类Dev

列取决于其他

来自分类Dev

Redux –减速器,取决于其他状态

来自分类Dev

多线程共享计数器和列表集合变量

来自分类Dev

指定范围之间的C ++多线程素数计数器

来自分类Dev

Posix信号量作为线程安全计数器

来自分类Dev

多线程共享计数器和列表集合变量

来自分类Dev

如何在多线程中同步“ for”循环计数器?

来自分类Dev

指定范围之间的C ++多线程素数计数器

来自分类Dev

得到错误答案使用线程安全计数器

来自分类Dev

带断点的线程的程序计数器是什么?

来自分类Dev

内存计数器线程不起作用

来自分类Dev

读取表的当前“元数据更改计数器”(版本计数)

来自分类Dev

Prolog:递增计数器,取决于列表列表中的元素

来自分类Dev

Prolog:递增计数器,取决于列表列表中的元素

来自分类Dev

如何启用/禁用项目取决于JSON中的计数器?

来自分类Dev

强制解锁由其他线程锁定的互斥锁

来自分类Dev

锁定对象不会因其他线程的更改而停止

来自分类Dev

停止其他线程的线程

来自分类Dev

openmp中的Pi不取决于线程