2
我在同一時間運行2個線程,但是我有關鍵部分,我需要將某些內容放入MySql數據庫中。問題是他們可以同時放置同樣的東西。同步和暫停PHP中的線程
我已經做了一些計算方法,顯示索引20000個不同的新聞網頁,索引是從20000到20020.(所以0〜20是重複的)
如何暫停一個線程,而另一個是訪問數據庫?
-----thread.php
class Process extends Thread {
public function __construct($website_url){
$this->website_url = $website_url;
}
public function run() {
work($this->website_url);
}
}
-------------- work
function work($website_url) {
while(condition) {
some work...
if(something->check){ // if this exist in base
mysqli->query("INSERT something IN db...");
prepare bind exec...
}
// between check and insert, second thread can put that element
// critical section is really small but sometimes occurs ...
}
}
------ main.php
$job1 = new Process($website_url,$trigger);
$job2 = new Process($website_url,$trigger);
$job1->start();
$job2->start();
MyISAM或InnoDB?鎖定你正在寫的表,問題解決.. – Ohgodwhy 2014-08-27 17:59:14
@Ohgodwhy InnoDB,但問題是在PHP中,我檢查,並格式化有關新聞的信息,然後我打電話插入查詢。 – 2014-08-27 18:02:12
首先運行一個'SHOW OPEN TABLES'查詢,迭代結果,檢測有問題的表,如果存在則不運行查詢,如果不存在,則運行查詢 – Ohgodwhy 2014-08-27 18:03:27