Новые книги

Задачи рефакторинга тесно связанны с задачами написания понятного, удобного кода. Соответственно, если я пишу как следует писать или чего лучше избегать — это к рефакторингу не относится. С одной стороны. Но ведь следуя этим рекомендациям, вы можете пересмотреть свой код и исправить потенциальные ошибки. А вот это уже чистой воды рефакторинг. Поэтому я не буду особенно зацикливаться именно на рефакторинге, а буду рассказывать о хорошем, понятном коде.

Разумеется, моё представление о хорошем коде может коренным образом отличаться от вашего и тут я не претендую на статус непогрешимого. Хочу только заметить, что всё, что изложено в этой книге основано на многолетних наблюдениях и в целом, так или иначе, согласуется с общепризнанными подходами к программированию.

Примеры я буду приводить на языке Object Pascal. В основном я работаю на нём, пишу на Delphi. Предвидя нападки со стороны поклонников C-подобных языков, скажу два тезиса:
Найти нужную и актуальную информацию в Интернете порой очень непросто. Количество информационного мусора в Сети растет как снежный ком, и добраться до данных, которые вам действительно необходимы, используя традиционные Яндекс и Google, иногда просто невозможно. Книга, которую вы держите в руках, позволит увеличить эффективность вашего поиска информации в Интернете во много раз. Здесь описаны приемы, поисковые сайты и программы для специализированного поиска информации. Рассмотрены современные разновидности интернет-поиска: универсальный поиск, вертикальный поиск, метапоисковые системы, построение персональных поисковиков, поиск аудиовизуального контента, поиск по скрытому Интернету. Для всех рассмотренных систем приведены их характеристика и советы по максимально эффективному использованию.

Содержание

Этот модуль предоставляет функции семафоров, используя семафоры System V. Семафоры могут использоваться для обеспечения эксклюзивного доступа к русурсам используемой машины или для ограничения числа процессов, которые могут одновременно использовать ресурс.

Поддержка разделяемой памяти также включена. Она совместима с System V - совместимыми системами.

sem_get

sem_get -- получение идентификатора семафора
Описание

int sem_get (int key, int [ max_acquire ] , int [ perm ] );

Возвращает положительный индентификатор семафора при успехе или false при ошибке.

sem_get() возвращает идентификатор, который может быть использован для доступа к семафору System V с указанным ключом. Семафор создается, если необходимо, используя биты доступа, указанные в perm (по умолчанию 0666). Число процессов, которое может быть зафиксировано семафором одновременно устанавливается в max_acquire (по-умолчанию 1). В действительности это значение устанавливается только если процесс обнаруживает, что он является единственным, присоединенным к семафору.

Повторный вызов функции sem_get() с тем же ключем вернет другой идентификатор семафора, но оба идентификатора указывают на один и тот же семафор.

См. также: sem_acquire() and sem_release() .

sem_acquire

sem_acquire -- фиксирует семафор
Описание

int sem_acquire (int sem_identifier);

Возвращает true при успехе, false при ошибке.

sem_acquire() блокируется (если необходимо) до тех пор, пока семафор сможет быть зафиксирован. Процесс, пытающийся зафиксировать семафор, который уже зафиксирован, буде блокирован навсегда, если фиксация семафора вызовет превышение его max_acquire значения..

После обработки запроса, любые семафоры, зафиксированные процессом, но не освобожденные вручную, будут освобождены автоматически с выдачей предупреждения.

См. также: sem_get() and sem_release() .

sem_release

sem_release -- освобождает семафор
Описание

int sem_release (int sem_identifier);

Возвращает true при успехе и false при ошибке.

sem_release() освобождает семафор если он зафиксирован в данное время вызывающим процессом, иначе выдается предупреждение.

После освобождения семафора функция sem_acquire() может быть вызвана для ре-фиксации его.

См. также: sem_get() and sem_acquire() .

shm_attach

shm_attach -- Создает или открывает разделяемую память
Описание

int shm_attach (long key, long memsize, long perm);

Создает или открывает разделяемую память с указанным ключем и размером памяти.

shm_detach

shm_detach -- Отсоединяет от разделяемой памяти
Описание

int shm_detach (long id);

Отсоединяет от разделяемой памяти с указанным id , созданным с помощью функции shm_attach() . Помните, что разделяемая память все еще существует в Unix-системе и данные все еще присутствуют.

shm_put_var

shm_put_var -- Вставляет или обновляет переменную в разделяемой памяти
Описание

int shm_put_var (int id, long variable_key, mixed variable);

Вставляет или обновляет переменную с указанным variable_key. Все типы переменных (double, long, string, array) поддерживаются. Функция serialize() может быть использована для хранения данных.

shm_put_var

shm_put_var -- Считывает переменную с указанным variable_key
Описание

mixed shm_get_var (int id, long variable_key);

Считывает переменную с указанным variable_key . Переменная все еще присутствует в разделяемой памяти. Функция unserialize() может быть использована для декодирования данных.

shm_remove_var

shm_remove_var -- Удаляет переменную из разделяемой памяти
Описание

int shm_remove_var (int id, long variable_key);

Удаляет переменную с указанным variable_key из разделяемой памяти.

shm_remove

shm_remove -- Удаляет разделяемую память
Описание

int shm_remove (long key);

Удаляет разделяемую память из Unix-системы. Все данные будут уничтожены.

Назад, к содержанию