簡體   English   中英

C ++ 11 std :: thread以單獨的方法連接到主線程

[英]C++11 std::thread join to main thread in a separate method

我有以下代碼:

void do_join(std::thread& t)
{
    t.join();
}

void join_all(std::vector<std::thread>& v)
{
    std::for_each(v.begin(),v.end(),do_join);
}

int main()
{         
    std::vector<std::thread> myThreads;

    for(int i = 1; i <= 3; i++)
    {

        myThreads.push_back(std::thread(threadMethod));

    }


    join_all(myThreads);
}

目標是在一個循環中創建多個線程,將它們添加到線程向量中 ,然后遍歷該向量將它們連接到線程。

這里的問題是,當我的do_join方法首次執行時,它會加入線程並等待,而不是從vector中加入任何其他線程。 那是因為我的線程正在使用一些條件變量,並等待其他一些任務完成。 好像do_join方法正在等待剛剛加入的線程完成。

如果我嘗試直接在函數中執行for_each,則會發生相同的事情。

這個想法是要能夠將所有這些線程連接到線程,而不是讓我假設do_join的方法線程發生在這里。 我當然可以參加,並分別創建它們,因為實際上我並不需要他們在一個載體(線程數從一開始就知道),但我需要一個載體,因為在我的應用程序的每個線程使用實際創建我沒有包含在該示例代碼中的不同方法的參數。 我只是不想為每個創建和加入的線程添加新行。

感謝您的任何幫助!

編輯:也許值得一提的是,我正在使用Ubuntu。

根據定義join方法會阻塞當前線程,直到您嘗試加入的線程完成為止:

阻塞當前線程,直到由*this標識的線程完成執行。

從這里開始。

也就是說,它的目的 join擋住了它的線程,直到另一個結束。 如果您不希望該線程被阻塞,則不要使用join

您應該問自己一個問題:您要達到什么目標? 如果您希望主程序僅在所有其他線程都完成后才繼續運行,那么您現在正在做的事情是正確的,無論如何,您都必須等待所有線程。 否則,您可能需要某種方式讓其他線程向主要線程發出信號,告知它們已完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM