【问题标题】:Best way to stop running pthreads using conditional variable使用条件变量停止运行 pthread 的最佳方法
【发布时间】:2011-06-21 10:57:26
【问题描述】:

我在我的 c 代码中使用 pthreads。我在主例程中创建并启动一个线程 (THREAD_1),从 THREAD_1 开始,我调用一个例程再次创建两个新线程 (THREAD_2, THREAD_3)。所有三个线程将在条件循环中以毫秒睡眠并行运行。满足某个条件后,我想停止/退出两个线程(THREAD_2,THREAD_3),然后是 THREAD_1。 最好的方法是什么?

【问题讨论】:

  • 所有线程都执行相同的条件吗?如果是,如果任何一个线程都满足条件,那么你想退出所有线程吗?
  • @Jay:其实我想先结束(THREAD_2 和 THREAD_3),最后是 THREAD_1。之后我想重新启动我的主程序,我想再次启动 THREAD_1,从而启动 THREAD2 和 THREAD_3

标签: c pthreads


【解决方案1】:
            while(true){
                    apr_thread_mutex_lock(mySharedObject->getMutex());
                    while (mySharedObject->getMessagesReady() == 0 && !mySharedObject->getEndThread()) {
                            apr_thread_cond_wait(mySharedObject->getCond(), mySharedObject->getMutex());
                    }
                    if (mySharedObject->getEndThread()){
                            apr_thread_mutex_unlock(mySharedObject->getMutex());
                            break;
                    }

                    apr_thread_mutex_unlock(mySharedObject->getMutex());

                    if (mySharedObject->getMessagesReady()>0){
                             myActiveProducer->send();
                    }

            }

这是我实现它的方式。有什么问题吗??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多