多线程编程遇到的问题,请大家帮忙。

oweny 2007-09-18 09:05:01
现在在尝试做一个服务器端的程序,负责与尽可能多的客户端进行交互。
基于linux的嵌入式系统,用c实现。
要实现的功能简单说一下:客户端开启以后,首先向服务器端发消息A,是一个请求登录的消息,服务器端收到之后,进行检查,然后向客户端回应一个消息A~,然后客户端收到之后向服务器发消息B,服务器端收到之后回B~,此后这个过程将一直进行,B~里面就是一些时间和频率的校准信息,目的是实现服务器和客户端的同步。
所有的客户端只能通过一个端口与服务器进行通信,标识消息来源的是消息中包含的Mac地址。
我服务器端现在的处理是:维护一个链表,每一个结点对应一个客户端,结点内包含客户端的Mac地址、一个消息队列和其他一些信息。没收到一个消息,首先判断类型,如果是消息A,说明是一个新的客户端登录,首先我创建一个队列,然后把消息A放到队列中,然后在链表中新增一个结点,然后创建一个线程,把结点指针作为参数传给线程处理函数,以后收到B消息,就通过查找链表,找到相应的客户端对应的结点,从而找到消息队列地址,然后将消息写入队列。主要思路就是主线程负责将消息写到消息对应客户端对应的队列中,然后线程处理函数负责读出消息,然后进行相应处理。
因为刚接触多线程编程,很多东西理解的不到位,可能描述的不准确。
现在主要碰到这样写问题,希望大家帮我看看。
1.怎样才能实现消息队列主线程写和子线程的读不冲突,就是不知道该怎样同步这个消息队列,用互斥锁好像不太可行,如果有500个客户端,那就要建500个锁,而且维护这些锁也比较困难。
2.子线程中碰到异常要推出的话,因为主线程在循环接收消息的处理中,没办法调用pthread_join回收线程资源,这样长时间的话可能不行。
...全文
145 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkone 2007-09-18
  • 打赏
  • 举报
回复
每个处理线程建立一个队列或独立的数据交互区域,主线程收到消息后分配到不同的处理线程队列
hefuhua 2007-09-18
  • 打赏
  • 举报
回复
大UP
oweny 2007-09-18
  • 打赏
  • 举报
回复
我描述的不是很清楚,是这样的,服务器端只提供一个端口和客户端进行通信,这个通信不是像ftp那种文件的传送,而是服务器收到客户端的消息后要对消息进行解析,作出相应的回复,反复这样一个过程。所以主线程要把消息分发给相应的处理线程。
roadingyh 2007-09-18
  • 打赏
  • 举报
回复
这个问题好像没有这么复杂吧..
一个主线程收到连接请求了,生成一个子线程,子线程负责通讯就可以了.主线程与子线程之间基本上不需要什么通讯.
可能我需求分析得不够....
oweny 2007-09-18
  • 打赏
  • 举报
回复
自己顶,还是没有找到合适的方法。
oweny 2007-09-18
  • 打赏
  • 举报
回复
darkone:每个处理线程建立一个队列或独立的数据交互区域,主线程收到消息后分配到不同的处理线程队列
谢谢!
我现在就是这么做的,每个处理线程和主线程都有一个独立的消息队列进行这两个线程的交互,但是不知道怎样
才能做好主线程和处理线程对这个队列的同步。
yihucha166 2007-09-18
  • 打赏
  • 举报
回复
帮UP

23,218

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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