LINUX.ORG.RU

Сообщения Saintdmitry

 

Что с точки зрения программиста лучше поставить на сервер?

Форум — Development

Linux или freebsd, если linux, то какой?)

Работа в основном с модулями апача, написанными на С и явой.

Saintdmitry
()

Синхронизация в модуле апача

Форум — Development

У меня довольно странная картина с синхронизацией модуля апача и своего сервера. На freebsd 5.4 запущен сервер, который при запуске инициализирует именнованный семафор и пишет в shared memory, модуль в апаче читает из shared memory

Если одновременно обращается к апачу только один клиент — всё нормально, но если много — sem_post иногда выдает ошибку EOVERFLOW, но освобождает семафор не увеличив его значение. Таким образом при количестве параллельных запросов >100 — меньше чем за минуту семафор приобретает отрицательное значение.

Не именнованных семафоров или разделяемых мьютексов — в freebsd 5.4 просто нет.

static int handler(request_rec *r) {

sem_t * sem = sem_open(SEMAPHORE, O_RDWR, 0777, 1); if(sem == SEM_FAILED) { log.Write(INFO, "sem_failed"); }

if(sem_wait(sem) == 0) { int val;

sem_getvalue(sem, &val); log.Write(INFO, "pid :%d, sem:-%d, max: %d", getpid(), val, SEM_VALUE_MAX);

if(sem_post(sem) != 0) { log.Write(INFO, "pid :%d, sem_post failed(%s)", getpid(), strerror(errno)); }

sem_getvalue(sem, &val); log.Write(INFO, "pid :%d, sem:+%d, max: %d", getpid(), val, SEM_VALUE_MAX);

sem_close(sem); }

ap_set_content_length(r, 0); ap_send_http_header(r);

return OK; }

Что делать, пока не знаю

Saintdmitry
()

RSS подписка на новые темы