假设我们有std :: map套接字映射,它是一个多线程应用程序。映射中将有多个线程访问套接字以发送套接字数据,同时,映射中将只有一个线程访问套接字以接收数据,并且如果远程端关闭,则该线程还将删除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/