假设我们有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/

10-10 14:54