ДЛя семафоров SystemV можна сделать такую штуку как ожидание значения 0:int wait_null(int semID) {
struct sembuf operations[1];
operations[0].sem_num = 0;
operations[0].sem_op = 0;
operations[0].sem_flg = 0;
return semop(semid,operations,1);
}Не могу такое найти для семафоров Posix. Можна ли что то похожее организовать, возможно не через семафоры Posix?
>ДЛя семафоров SystemV можна сделать такую штуку как ожидание значения 0:
>
>int wait_null(int semID) {
> struct sembuf operations[1];
> operations[0].sem_num = 0;
> operations[0].sem_op = 0;
> operations[0].sem_flg = 0;
> return semop(semid,operations,1);
>}
>
>Не могу такое найти для семафоров Posix. Можна ли что то похожее
>организовать, возможно не через семафоры Posix?а разве sem_wait() делает что-то другое?
>а разве sem_wait() делает что-то другое?
Возврат из sem_wait() идет тогда, когда удалось уменьшить значение семафора, а оно могло быть не только 1, а и 2,3... А нужно только тогда, когда значения семафора достигло 0 без изменения его сначения.
>>а разве sem_wait() делает что-то другое?
>Возврат из sem_wait() идет тогда, когда удалось уменьшить значение семафора, а оно
>могло быть не только 1, а и 2,3... А нужно только
>тогда, когда значения семафора достигло 0 без изменения его сначения.
Вот здесь: http://www-128.ibm.com/developerworks/linux/library/l-ipc2li... снизу (Listing 12 и 13)есть пример с решением чем-то схожей задачи. Это достигается при помощи введения дополнительного счетчика, закрытого мутексом, и проверкой его состояния. Вероятно, Вам тоже следует двигаться в этом направлении.
>Вот здесь: http://www-128.ibm.com/developerworks/linux/library/l-ipc2li... снизу (Listing 12 и 13)есть пример с решением чем-то
>схожей задачи. Это достигается при помощи введения дополнительного счетчика, закрытого мутексом,
>и проверкой его состояния. Вероятно, Вам тоже следует двигаться в этом
>направлении.Спасибо, уже обдумывал решение на основе переменной с мьютексами. Пока не нравиться этот вариант, так как придеться мьютексы засовывать в shared memory. Но если не найду другие варианты решения - приму этот вариант. А за ссылку еще раз спасибо!