WordPress and multithreading

时间:2015-03-11 作者:User

我正在开发一个插件。我创建了一个API,可以读取和写入DB中的自定义表。可以从N个客户端同时调用此API(这确实发生了)。我注意到在这种情况下会出现问题。举一个具体的例子:

if (is_null($wpdb->get_var("SELECT column FROM my_table_name WHERE condition"))) {
    // branch 1
}
else {
    // branch 2
}
在分支1中,我天真地假设从DB获得的变量为NULL, 但也许这不再是真的,因为它已经被另一个线程改变了。我需要保证,至少在分支1结束之前,这个条件没有改变。

WordPress解决这个问题的方法是什么?信号量、文件锁定、MySQL锁表?还是有更好的解决方案?我在网上搜索了很长时间,但没有找到任何明确的信息。WordPress本身(或主要插件)在这种情况下是如何工作的?

1 个回复
SO网友:Dougal Campbell

您的插件是供其他人使用,还是只在您控制的服务器上使用?如果是后者,那么可能有几种方法可以实现你想要的。例如Sync extension. 这样,我认为可以使用互斥量或信号量来设置标志,然后可以在读/写函数中使用。

如果您已经有了memcache,那么这可能是一种轻量级的方法来完成同样的事情,而不需要安装新的扩展。

如果做不到这一点,您可能可以使用db表锁,但这似乎真的很费力,我担心会对数据库性能造成影响。

结束

相关推荐

$wpdb->查询无法插入数据

我编写代码将数据保存在Wordpress数据库表中(表名为wp\\U fafa)但无法在中保存数据$qry = $wpdb->query( \"INSERT INTO `wp_fafa` (titile,liveprice,changing,lowest,topest,time) VALUES (\'\" . trim($row->item(0)->nodeValue) . \"\',\'\" . trim($row->item(2)->nodeValue) . \"\',\