- 论坛徽章:
- 1
|
windoze 发表于 2015-01-12 11:42 ![]()
回复 7# jd808
关键不是有多少个锁,而是这些锁争用的次数,如果你只有一把锁锁住所有资源然后让一堆线 ...
我吧线程的管道锁去掉了,没任何效果,现在只有用户socket锁,这个锁的粒度很细,锁到每个用户身上了,还有一把链表锁,这个链表存储者所有的用户句柄,对这个链表遍历的时候必须加锁,否则万一其他线程删除掉了fd就没则了,只能报段错误咯,(遍历链表,将消息发送给指定的几个用户,通过id进行一一对比),链表也没想到办法将他分成几个链表,实际上现在就是用了200个链表,每个连表里存200个用户,这些用户又没法用区域隔开.- int i;
- ConnList* plist;
- ConnList* m_UserList = g_pServer->GetUserList();
- for (i=0; i<g_pServer->GetNodeListCount(); i++) {
- plist = &m_UserList[i];
- pthread_rwlock_rdlock(&plist->ConnListLock);
- while (pcon != NULL) {
- if(pcon->fd_type == 1){
- if(m_conn->operators_id==pcon->operators_id&&m_conn->server_id==pcon->server_id)
- to_client(pcon,m_sbuff,command,g_pConf->STRZIP);
- }
- pcon = pcon->GetNext();
- }
- pthread_rwlock_unlock(&plist->ConnListLock);
- }
复制代码 但这个也就是个读写锁,应该没太大关系吧. |
|