Skip to content

这段代码是线程安全的吗 #64

Open
@xiebaoma

Description

@xiebaoma

net/TcpSession.cpp:

std::shared_ptr<TcpConnection> getConnectionPtr()
{
    if (tmpConn_.expired())
        return NULL;
    return tmpConn_.lock();
}

可能存在这样的竞态条件:
线程 A 调用 expired() 判断为 false
线程 B 恰好在此时销毁了 shared_ptr
线程 A 调用 lock() 得到的是空指针

感觉只用lock()就行了:

std::shared_ptr<TcpConnection> getConnectionPtr()
    {
        std::shared_ptr<TcpConnection> conn = tmpConn_.lock();
        if (!conn)
        {
            return nullptr;
        }
        return conn;
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions