我有一个带有非线程 Web 服务器的现有 c++ 嵌入式应用程序 (ARM)。它是这样使用的:
main(){
while(1){
doIO();
doProcess1();
doProcess2();
etc...
webServer.poll();
}
}
webServer.poll() 提供来自基本目录的页面,并在 url 包含特定模式时调用我的函数之一,以便它可以响应经常读取或写入 SD 卡的 rpc 调用。
我必须替换现有的 Web 服务器代码,但找不到满足我要求的非线程嵌入式 Web 服务器(没有 Boost 是最大的。)
Civetweb 似乎符合我的要求并且工作正常,但它是线程化的(每个连接 1 个。)
我的问题是,由于重写所有现有代码以实现线程安全不是一种选择,因此可以使用全局“threadLock”执行类似的操作吗?
main(){
startThreadedWebServer();
while(1){
pthread_mutex_lock(&threadLock);
doIO();
doProcess1();
doProcess2();
etc...
pthread_mutex_unlock(&threadLock);
sleep(0.1); //give webServer some time to get the lock
}
}
然后在 rpc 函数中:
pthread_mutex_lock(&threadLock);
doRpcCode()
pthread_mutex_unlock(&threadLock);
服务器可以在线程中提供普通页面,但任何 rpc 调用都将被锁定。
我现在正在这样做并且它正在工作,但我不知道是否有任何潜在的问题。这个应用程序通常有 1 个用户,最多可能 3 个,每隔几秒就会调用一次 rpc。速度并不是真正的问题。