Продолжаю долго и мучительно обучаться линуксу, причем, непростым путем - нет, чтоб, как все нормальные люди, спрашивать на каком нибудь ЛОРе, а я спрашиваю тут
В общем, задача: есть некий кусок кода, вызываемые из различных процессов, запущенных одновременно (доступ к устройству) Надо сделать так, чтобы каждый процесс перед выполнением данного куска кода ждал, чтобы его выполнение завершилось в других процессах, дабы не щемиться одновременно в одну дверь. Прочитал в умных манах про семафоры, решил, что это именно то, что мне надо и накорябал такой алгоритм: создаю бинарный семафор следующим образом:
Код:
...
while (sem_open(SEMAPHORE_NAME,O_RDWR)!=SEM_FAILED); // ждем пока семафор существует - где то выполняется секция
sem_open(SEMAPHORE_NAME, O_CREAT, 0777, 0); //процесс освободился - создаем свой семафор
... // Выполняемая секция кода
sem_unlink(SEMAPHORE_NAME); //освободаем процесс - убиваем свой семафор
...
Интуитивно понимаю что фигня, да и работает неправильно. А как надо?