+ -
当前位置:首页 → 问答吧 → 问一个socket send的问题

问一个socket send的问题

时间:2011-10-13

来源:互联网

现在我程序里面有两个线程
threadFunc1()
{
..................
pthread_mutex_lock(&mutex);
..........
buf[i]=12333;
pthread_mutex_unlock(&mutex);

}
线程1负责往BUFF里面存放数据
threadFunc2()
{
pthread_mutex_lock(&mutex);
..........
send(socketfd,buf,len,0);
pthread_mutex_unlock(&mutex);
}
线程2负责把BUFF里的数据发出去

两边采用了互斥锁来保证数据安全。

现在的问题是,当网络不好时,send函数把缓存里的数据堆满后,阻塞在这里
而互斥锁没有解锁,导致整个程序停掉了
求解。


作者: qgq8312   发布时间: 2011-10-13

友情帮顶

作者: ice   发布时间: 2011-10-13

你不应该互斥send,而应该是把数据拷贝出来,再send:

tempbuff;

pthread_mutex_lock(&mutex);
..........
//copy to tempbuff
pthread_mutex_unlock(&mutex);

send(socketfd,tempbuf,len,0);

作者: yang79tao   发布时间: 2011-10-13

楼主,你这种线程间通讯方式不行的,可能在某种情况下,数据写到buffer中,却没有被发出去,而是被后面的数据覆盖了。
建议:
(1)使用pipe来做线程间数据通讯
(2)申请一个大的buffer数组(全局),通过pipe传递buffer的指针,而不是直接传输数据,这样效率能高很多。
(3)每个buffer需要一个标识flag,表明这个buffer里的数据是否已经发出去。防止数据丢失

暂时就想到这些

作者: dongjiawei316   发布时间: 2011-10-13