2015-06-03 3 views
4

Я родом из мира C++.Thrift PHP singleton без замков?

И недавно я начал использовать Apache Thrift, инфраструктуру RPC. Я пишу PHP-код клиента и код сервера Python.

Когда я читаю реализацию PHP, я нахожу следующее:

class TStringFuncFactory { 
private static $_instance; 

/** 
* Get the Singleton instance of TStringFunc implementation that is 
* compatible with the current system's mbstring.func_overload settings. 
* 
* @return TStringFunc 
*/ 
public static function create() { 
    if(!self::$_instance) { 
     self::_setInstance(); 
    } 

    return self::$_instance; 
} 
.... 
} 

Это одноплодное без блокировок.

Вопрос

Что такое шаблон обработки PHP? Гарантирует ли это, что этого не произойдет.

+0

Возможно, метод '_setInstance' обрабатывает любые проблемы с блокировкой/доступом? –

+0

@NikosM. Я не уверен, вот почему я спрашиваю здесь. Для обеспечения его правильности должен быть некоторый механизм блокировки. Поскольку я совершенно новичок в php, поэтому я хочу узнать его подробности. – Alex

+0

Я не использую пристрастие к Apache, но не могу заглянуть в исходный код для этого и увидеть свое «я» или опубликовать его здесь? –

ответ

1

+1 @ N.B.

PHP (cli или http) существует как отдельный поток на одном процессоре cpu, если вы не выполняете какую-либо реальную работу, чтобы сделать ваше приложение многопоточным.

How can one use multi threading in PHP applications

Для стороны HTTP, каждый PHP живет исполнение и умирает с циклом запроса. Сервер может обрабатывать несколько запросов одновременно, что приведет к нескольким параллельным выполнению PHP, но каждый из них полностью независим от следующего.

Так что в основном это не проблема. Для всех целей и задач проверка статического члена данных удовлетворяет одноэлементному шаблону.

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