我正在尝试开发一个具有多线程功能的软件。 在 Linux 上,脚本运行良好,我使用的模块是“forks”。 换句话说,在查询数据库和类似内容时,线程之间不存在共享处理程序的问题。 一旦我尝试在 Windows(Strawberry Perl)上运行脚本,当我尝试 cpan install forks 时,它说我的操作系统(64 位)的当前版本不支持“forks 模块”。 继续,我决定使用“线程”,但我收到了以下错误,几乎可以肯定与线程之间的共享处理程序相关联。
'' 线程 1 异常终止: DBD::SQLite::db 准备失败:句柄 2 由线程 d97fe8 拥有,而不是当前线程 3a01058 (句柄不能在线程之间共享,您的驱动程序可能需要添加 CLONE 方法)在 file.pl 行180,1号线。 ''
如何解决上述问题并使脚本可以在Windows Strawberry Perl上运行?
最佳答案
一般each thread or process needs to have its own handle to the database 。在每个fork
之后或每个threads::create
内创建一个新句柄。
关于Perl 多线程 : '' forks '' vs ' 'threads'' in cross platforms scripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450141/