gpt4 book ai didi

c++ - 我们可以在 Sockets Map 上使用读写锁吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:04 28 4
gpt4 key购买 nike

假设我们有 std::map 套接字映射,它是一个多线程应用程序。会有多个线程访问map中的socket来发送socket数据,同时只有一个线程访问map中的socket来接收数据,并且如果远端关闭,该线程也会删除SocketInfo*。

在上述情况下,我们可以使用读写锁(pthread_rwlock_t)来同步线程吗?如果是的话,我们是否比pthread_mutex_t有更多的好处?

史蒂夫

[伪代码]

     class CSocketIO {  
std::map<int, SocketInfo*> m_Sockets; //socket value and socket info
pthread_t m_ReadingSocketThreads; // for reading socket data
};

class CSession {
void SendOutNetworkPackets(); //access sockets for sending sock data
pthread_t m_WorkerThread; // do jobs and send sock data
};

class CSomeClass {
void SendOutNetworkPackets(); // also access sockets
pthread_t m_WorkerThread; // do jobs and send sock data
};

最佳答案

是的,您可以使用读/写锁来执行此操作,实际上建议这样做。

这样做的好处是,您可以同时拥有多个具有读/写锁的读取器,而如果您使用简单的互斥锁,则如果一个线程正在读取,则想要读取的其他线程将阻塞,从而有效地序列化读取。使用读/写锁,读取器仅在发生写入时才会阻塞。

关于c++ - 我们可以在 Sockets Map 上使用读写锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16919429/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com