> почему up на неопущенном семафоре нигде не регистрируется как ошибка?
потому, что это не ошибка, хотя используется редко.
semaphore - он, на самом деле, counting semaphore, т.е. после
двух up() (на locked sem) можно сделать два неблокирующих down().
> да, но почему в таком случае он отказывается после up делать down?
пример кода
cvv, это НЕ пример кода для такой простой проблемы.
пример кода был бы таким:
struct rw_semaphore rw;
void test(void)
{
init_rwsem(&rw);
up_write(&rw);
down_write(&rw); // <--------- виснет здесь.
}
уже не говоря о том что ваш код (с моей точки зрения)
трудно назвать сколько-нибудь читаемым, он не показывает
как были инициализированы эти структуры данных.
а виснет потому, что и должно виснуть.
потому, что это не семафор. это RW семафор, и это
разные вещи. а вы спрашивали:
> почему up на неопущенном семафоре нигде не регистрируется как ошибка?
> да, но почему в таком случае он отказывается после up делать down?
чем всех ввели в заблуждение.
>cvv, это НЕ пример кода для такой простой проблемы.
>пример кода был бы таким:
понятно, но мне чёто показалось что вырезать готовый проблемный код есть более правильное решение, ведь я в принципе мог случайно ошибится на ровном месте, как в предыдущем случае.
>он не показывает как были инициализированы эти структуры данных.
не понял что вы имели ввиду, разве вот этот цикл не инициализирует структуры?:
for (i=0; i<__FD_SETSIZE; i++){
fd_set_arr[i].sendbuf_id=0LL;
init_rwsem(&fd_set_arr[i].mutex);
}
>а виснет потому, что и должно виснуть.
>потому, что это не семафор. это RW семафор, и это разные вещи.
спасибо
>а вы спрашивали:
>> почему up на неопущенном семафоре нигде не регистрируется как ошибка?
>> да, но почему в таком случае он отказывается после up делать down?
>чем всех ввели в заблуждение.
извиняюсь, кода небыло под рукой
> > он не показывает как были инициализированы эти структуры данных.
>
> не понял что вы имели ввиду, разве вот этот цикл не инициализирует структуры?:
да, прошу прощения, не заметил.