深圳定制开发网站,肇庆做网约车,写网站软件,wordpress 电商 开发1.前言 lwIP的内核并不是线程安全的。如果我们必须在多线程环境里使用lwIP#xff0c;那么我们必须使用“upper”API层的函数#xff08;netconn或sockets#xff09;。当使用raw API时#xff0c;你需要自己保护你的内核。 2.并发处理 #xff08;1#xff09;Sockets通…1.前言 lwIP的内核并不是线程安全的。如果我们必须在多线程环境里使用lwIP那么我们必须使用“upper”API层的函数netconn或sockets。当使用raw API时你需要自己保护你的内核。 2.并发处理 1Sockets通常来说并不能在多个应用线程中使用在udp/raw netconnsendto/recv可以实现。 2一些上层操作的并发调用必须被应用层直接处理如socket,bind,connect,setsockopt和close。 有些情况必须要lwIP来处理比如要知道一个’int socket’的调用在close/socket之间是否都相同是困难的如下所示 Task1int s1socket() (tell s15)Task1,Task2use s1 with send,recv (ok, it could be possible).Task2closesocket(s1)Task3int s2socket() (and... it could be s25)Task1send(s1) !!!! Problem, s1 would not the same proto/port than the first we open, !!!! but only application can know that !!!! 3一些操作recv,recvfrom,send,sendto…可以变为线程安全。为了使能全双工协议我们必须将netconn/sockets的一些处理放到api_msg 4一些其它需要了解的信息 一些特别的函数(netif_xxx和dhcp_xxx)在多线程中可能导致问题。这些函数在tcpip_thread使用相同的变量5一些举例 如果一个应用线程删除了一个netif但tcpip_thread还在运行这个会导致一个崩溃。在同一个时间内加入2个netif将会导致接口的丢失详情请查看https://savannah.nongnu.org/bugs/?19347如果有一个应用线程停止了一个接口的dhcp由于netif’s dhcp字段被dhcp’s定时器使用在tcpip_thread线程运行你将导致一个崩溃详情请查看https://savannah.nongnu.org/patch/?5798为了避免先前2个问题你可以使用”netif api”该api非常接近于‘netif’和‘dhcp’API 转载于:https://www.cnblogs.com/smartjourneys/p/8214321.html