Это сценарий обработки исключений в многопоточном сценарии. Несколько потоков работают параллельно на некотором общем ресурсе, заблокированном при взаимном исключении, когда это необходимо. Если один поток обращается к исключению, могу ли я использовать sem_trywait, чтобы проверить, ожидает ли какой-либо другой поток в семафоре, и если я найду какой-нибудь поток, ожидающий семафора, будет использовать флаг, в котором произошло исключение, и я выведу sem_post, чтобы ожидающий поток может не дождаться и проверить, произошло ли какое-то исключение, прежде чем продолжить. В случае возникновения исключения другой поток, который в противном случае ожидался, теперь будет идти к изящному выходу. Пожалуйста, предложите. Мои фактические qs: могу ли я использовать sem_trywait?Как проверить в C Posix поток, если кто-то ждет на общем семафоре?
1
A
ответ
2
Наиболее простым решением было бы установить дополнительный механизм состояния резьбы. Семафоры не предназначены для обозначения того, ждет ли их кто-либо.
В глобально видимой переменной, которая записывается только нити, установите его — сказать 1
— если какой-то поток ждет семафор и 0
, если нет. Если кто-то хочет знать, хочет ли поток получить семафор, проверьте состояние переменной. Не должно быть слишком сложно обрабатывать условия гонки, задавая переменную, упорядочивая операции правильно.
Какой у вас вопрос? –
@ammoQ, могу ли я использовать sem_trywait для проверки ...? –
Все, что нужно сделать, это либо получить семафор, либо нет. Он не говорит вам, ждет ли он этого. – wallyk