我的应用程序的工作方式如下:工作线程初始化并开始在 pthread_cond_wait() 中等待主线程连接到数据库并开始一次将一行移交给适当的工作人员
由于 DB-driver 内部结构,在提取当前行之前无法读取下一行,因此主线程必须等待工作线程“接受”该行。
我通过在主线程中调用 pthread_cond_wait() 来实现这一点——等待来自工作线程的 pthread_signal()。这在 Linux 和 FreeBSD 上都可以正常工作,但在 Linux 上通常需要更长的时间。虽然我在 FreeBSD 上始终在大约 27 秒内处理整个 160 万行,但在 Linux 上通常需要 2 分钟以上。除了有时Linux 框显示相同的时间...
代码是从相同的源编译的,程序与相同的数据库服务器通信。如果有的话,Linux 机器与 DB 位于同一个 LAN 上,而 FreeBSD 机器通过 VPN 连接(所以它应该会慢一点)。但是困扰我的是Linux结果的广泛不一致,我怀疑线程协调......
这是我现在拥有的:
MAIN THREAD WORKER
--------------------------------------------------------------------------
get new row
figure out, which worker it belongs to lock my mutex
lock the worker's mutex go into pthread_cond_wait
signal the worker extract the row's data
unlock the worker's mutex signal the main thread
go into pthread_cond_wait unlock the mutex
go on back to getting the next row go on to process the row's data
有没有更好的办法?谢谢!