2015-02-18 2 views
1

Я пытаюсь вызвать GetAllDomains в библиотеке codeigniter, но когда два вызова происходят одновременно, этот метод выдает ошибки, любое решение для его вызова исключительно или с использованием мьютекса, первый пользователь вызывает этот метод и другие ждут до релиза. код, который называют GetAllDomains:Исключительный доступ к функции с использованием PHP

public function index(){ 

    $this->data['menu'] = 1; 
    $this->data['message'] = $this->session->flashdata('message'); 

    $domains = $this->exchange_api->GetAllDomains(); 

    if(is_null($domains)){ 
     $domains = array(); 
    } 

    var_dump($domains); 

} 

GetAllDomains функция:

public function GetAllDomains(){ 
    $domains = $this->ci->rest->post('GetAllDomain'); 
    return isset($domains->Result) && $domains->Result == 1 ? $domains->Param: null; 
} 

ответ

0

Вы могли бы просто использовать flock

$fp = fopen("/tmp/lock.txt", "w+"); 
if (flock($fp, LOCK_EX)) { // lock 
    sleep(10); // your function execute 
    flock($fp, LOCK_UN); // unlock 
} else { 
    echo "failed"; 
} 
fclose($fp); 

Или MySQL getLock с аналогичным алгоритмом.

2

Thanx, что было полезно

public function GetAllDomains(){ 

    $this->ci->mutex->Lock(); 
    $domains = $this->ci->rest->post('GetAllDomain'); 
    $this->ci->mutex->Release(); 

    return isset($domains->Result) && $domains->Result == 1 ? $domains->Param: null; 
} 

Мьютекс Класс:

public function Lock(){ 

    $this->fp = fopen($this->lockFilePath, "w+"); 
    flock($this->fp, LOCK_EX); 

} 

public function Release(){ 

    flock($this->fp, LOCK_UN); 
    fclose($this->fp); 

} 
Смежные вопросы