线程对象矢量:完成后删除

时间:2017-11-03 13:16:48

标签: c++ multithreading vector mutex

我有一个线程对象的向量,每次客户端连接到我的服务器时,一个新的线程对象被添加到向量中,并且该线程运行我的clientHandler函数。

std::vector<std::thread> clientThreads; //vector of client threads
.../*setting up server.*/
std::mutex clientThreadsM;

while(1) {
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    std::unique_lock<std::mutex> CTlock(clientThreadsM);

    if(clientThreads.size() <= MAX_THREADS){
        clientThreads.push_back(std::thread(clientHandler, newsockfd, std::ref(userandPass), std::ref(UserAccounts)));
    }
CTlock.unlock();
}

但是,我需要进行两项重要的调整。

  1. 而不是if循环,我需要这样做,以便程序等待条件:clientThreads.size()&lt; = MAX_THREADS 为了使每个客户端最终连接到服务器。在C ++中是否有(高效)设施?

  2. 我想这样做,当线程结束时,它们会从向量中删除,以便为另一个客户端腾出空间。当然,必须以某种方式将其作为clientHandler函数的一部分来完成,因为我不能让while循环等待线程完成。有没有办法以某种方式让线程自我删除&#39;从矢量完成?

0 个答案:

没有答案