Linux下的线程同步问题

zhanghengsdnu 2011-01-17 02:20:40
socket编程,每客户单线程,支持链路切换,如何判断一个新到的connect请求是链路切换的还是一个新的客户端的?windows下利用内核对象的命名唯一性可以解决,例如每个客户建立一个以客户名为名字的event,connect请求到来后都新创建一个线程,然后看event是否存在,存在则是链路切换的,不存在则是新客户端的,Linux下如何实现呢?谢谢。
此外,
HANDLE tmpHandle = CreateFile(tempPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if ( tmpHandle == INVALID_HANDLE_VALUE)
{
bFinish = (FindNextFile(hSearch, &fileData) == 0);
continue;
}
else
{
CloseHandle(tmpHandle);
}

上述代码在遍历时可以跳过正在被其他程序使用的文件,但是遍历效率下降十倍!即对每一个文件都创建内核对象再紧跟着close会浪费大量的cpu周期,且cpu占有量也较高。如何遍历时跳过正在被其他程序使用的文件,各位大侠,请出手。
主要是第一个问题,第二个问题慢就慢点,还能解决,第一个不知如何解决,谢谢。





...全文
233 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
良少 2011-02-14
  • 打赏
  • 举报
回复
你的所谓链路切换。 不就是web程序用户http连接的问题吗.
?


用户每一次连接带一个cookie就是任意数据,服务器断就可判断这个connect是哪个用户。
服务器内存中保存一个散列表cookiemap<cookie,user>。 一查询就知道了。
bluesky12312388 2011-01-17
  • 打赏
  • 举报
回复
第二个问题直接用CFileFind,不用打开文件,很快的,
代码自己GOOGLE,很多的。

wesleyluo 2011-01-17
  • 打赏
  • 举报
回复
那位能说下什么是支持链路切换???
谢谢咯!
linsen_519 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 linsen_519 的回复:]

自己看书去阿!
[/Quote]
8楼服务相当不到位
linsen_519 2011-01-17
  • 打赏
  • 举报
回复
自己看书去阿!
cnlm2 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tracyjk 的回复:]

4楼服务相当到位
[/Quote]


++
tracyjk 2011-01-17
  • 打赏
  • 举报
回复
4楼服务相当到位
ayw215 2011-01-17
  • 打赏
  • 举报
回复
ls服务非常到位
bluesky12312388 2011-01-17
  • 打赏
  • 举报
回复
LZ记得包含:
#include <pthread.h>
链接的时候 加上 -lpthread参数。
bluesky12312388 2011-01-17
  • 打赏
  • 举报
回复
我们项目中正好用到。

pthread_cond_t m_event;
pthread_mutex_t m_cs;

pthread_mutex_init( &m_cs, NULL ); //初始化
pthread_cond_init( &m_event, NULL );
pthread_cond_wait( &m_event, &m_cs );//等待
pthread_cond_signal( &m_event ); //信号通知
xpston008 2011-01-17
  • 打赏
  • 举报
回复
监听线程用一个全局变量来保存客服端信息,每次检查是否已存在连接。
用map<string,clientinfo>应该不慢吧

1.先检查已存在连接的,线程是否正在处于连接状态。若连接先断开再切换。
ztenv 版主 2011-01-17
  • 打赏
  • 举报
回复
把当前的连接保存在内存中,然后遍历不就行了?为什么非要写到文件中去呢?

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧