$mutex = new SyncMutex();
$mutex->lock();
// Критическая секция - только один поток имеет доступ
$mutex->unlock();
sync
(SyncMutex)$semaphore = new SyncSemaphore("resource_name", 2);
$semaphore->lock();
// Доступ ограничен 2 потоками одновременно
$semaphore->unlock();
SyncSemaphore
в расширении sync
Характеристика | Мьютекс | Семафор |
---|---|---|
Владелец | Да (только один) | Нет |
Счетчик доступа | Нет (только 1) | Да (можно задавать) |
Использование | Защита ресурсов | Ограничение доступа |
В PHP | SyncMutex | SyncSemaphore |
// Мьютекс для защиты записи
$dbMutex = new SyncMutex();
$dbMutex->lock();
try {
// Операция с БД
$pdo->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
} finally {
$dbMutex->unlock();
}
// Семафор для ограничения соединений
$dbSemaphore = new SyncSemaphore("db_connections", 5);
$dbSemaphore->lock();
try {
// Установка соединения
$conn = new PDO($dsn, $user, $pass);
} finally {
$dbSemaphore->unlock();
}
мьютекс и семафор - важные механизмы для многопоточного программирования. Мьютекс гарантирует эксклюзивный доступ, а семафор позволяет гибко ограничивать количество одновременных доступов. В PHP они реализованы в расширении sync
, но для веб-приложений чаще используют блокировки на уровне БД или кеша.