问一个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函数把缓存里的数据堆满后,阻塞在这里
而互斥锁没有解锁,导致整个程序停掉了
求解。
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);
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里的数据是否已经发出去。防止数据丢失
暂时就想到这些
建议:
(1)使用pipe来做线程间数据通讯
(2)申请一个大的buffer数组(全局),通过pipe传递buffer的指针,而不是直接传输数据,这样效率能高很多。
(3)每个buffer需要一个标识flag,表明这个buffer里的数据是否已经发出去。防止数据丢失
暂时就想到这些
作者: dongjiawei316 发布时间: 2011-10-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28