1

我有一个带有非线程 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。速度并不是真正的问题。

4

0 回答 0