Как проверить значение семафора с помощью оператора '=='?

Семафор объявляется и создается так:

static struct semaphore *done;
done = sem_create("done",0); // semaphore value initialized to zero

Что происходит, когда

if(done==NULL)
{
     //Something done here...
}

условие if выполнено выше? поскольку для параметра done задано значение 0, выполняются ли операторы внутри блока if?

2 ответа

Решение

done указатель на семафор и условие done==NULL проверяет, удалось ли создать новый семафор, и в этом случае done будет содержать адрес нового семафора, или не удалось, в этом случае done будет держать NULL,

Короче говоря, это условие не проверяет состояние семафора, но если оно вообще было создано.

Я отвечаю на этот вопрос относительно реализаций OS161. done - указатель на семафор, и он будет иметь значение NULL, только если sem_create не создает семафор из-за нехватки памяти или других ограничений памяти.

Значение 0, которое передается в качестве параметра функции, которая инициализирует начальный счетчик семафора равным 0. Доступ к счетчику можно получить как done->count, а затем можно выполнить конкретный код в зависимости от значения счетчика.

При программировании для OS161 я решил несколько проблем с синхронизацией с помощью семафоров, вы можете проверить их по ссылке, приведенной ниже:

https://github.com/prathammalik/OS161/tree/master/kern/synchprobs

Другие вопросы по тегам