如何使用条件变量来等待线程?

时间:2016-01-30 16:58:01

标签: c++ multithreading sockets mutex condition-variable

我正在开发一个服务器并且给出了客户端。 它是一个共享文档,每次只有一个可以写入文件。 每隔10秒,我想“刷新”所有客户, 所以所有的客户都会看到可以写的客户写的是什么。 我的代码可以使用2个客户端,但是如果我再添加1个,那么就可以了。

这是我的代码:

void Server::addNewClient(SOCKET sc)
{

    //get the client's name
    std::string name = Helper::getUsername(sc);

    //new thread
    std::thread newClient(&Server::connection, this, sc, name);


    //get next writer
    next = clientDeque.size() > 1 ? clientDeque[1] : "no next";

    //send Message 101 
    Helper::sendUpdateMessage(sc, fileContent, clientDeque[0], next, getPosition(name));

    newClient.detach();

}

连接功能:

while (code != 208)
{
    //read only 
    while (name != clientDeque[0])
    {
        writeToServer(sc, name);
    }
   //""" same more code"""
   readFromServer(sc, name, code);

writeToServerfunction:

void Server::writeToServer(SOCKET sc, std::string name)
{
    cond.wait(_lock);

    try {
    Helper::sendUpdateMessage(sc, fileContent, clientDeque[0], next, getPosition(name));
    }
    catch (std::exception& ex)
    {
          std::cout << ex.what() << std::endl;
    }
}

在readFromServer函数中我有

cond.notify_all();

我做错了什么?

0 个答案:

没有答案