多线程编程遇到的问题,请大家帮忙。
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回收线程资源,这样长时间的话可能不行。