tcp断线重连问题请教大佬?

各位好,我现在用Linux 的API实现客户端,现在实现断线重连这个功能。
现在的一个做法是:收发分开,用三个线程,一个线程收,一个线程发,一个线程定时发送心跳。在操作系统API recv && send出错时发起重连,超时时做重连,代码示例如下:

recvThread:

while(_is_running)
{
        int rc = recv(....);
        if(rc == -1)
        {
                    if(errno == EINTR || errno == EAGAIN)
                                continue;
                    else
                            reconnect();
        }
}

sendThread:
while(_is_running)
{
        int rc = send(....);
        if(rc == -1)
        {
                    if(errno == EINTR || errno == EAGAIN)
                                    continue;
                    else
                                    reconnect();
        }
}


heartBeatThread:
while(_is_running)
{
        if(心跳超时)
                reconnect()

        sendHb();//也是通过发送线程发送的

        sleep(10);
}

void reconnect()
{
            close(fd)
            connect(fd);
}

这样有一个问题时reconnect是在三个线程中都会调用的,这样当出现断线时,岂不是三个线程都可能执行,还可能执行多次,没这方面经验,求大佬指点一下,或者讲解一下一般断线重连都是怎么做de

https://www.cnblogs.com/zhangdongsheng/p/4817625.html